Merge remote-tracking branch 'origin/1.9' into 1.9
# Conflicts: # src/main/resources/assets/bloodmagic/textures/items/ExplosivePowder.png # src/main/resources/assets/bloodmagic/textures/items/PlantOil.png # src/main/resources/assets/bloodmagic/textures/items/Saltpeter.png # src/main/resources/assets/bloodmagic/textures/items/Sulfur.png
This commit is contained in:
commit
6cd78757bf
|
@ -5,6 +5,7 @@ Version 2.0.0-36
|
|||
- Changed the Item Routing system so that it used capabilities instead
|
||||
- Updated the Alchemy Table recipe system so that it can provide better custom recipes.
|
||||
- Added some more recipes (like rudimentary ore doubling) to the alchemy table.
|
||||
- Added Explosive Powder, which is used to reduce cobblestone into gravel and gravel into sand (64 uses)
|
||||
|
||||
------------------------------------------------------
|
||||
Version 2.0.0-35
|
||||
|
|
20
src/main/java/WayofTime/bloodmagic/fuel/FuelHandler.java
Normal file
20
src/main/java/WayofTime/bloodmagic/fuel/FuelHandler.java
Normal file
|
@ -0,0 +1,20 @@
|
|||
package WayofTime.bloodmagic.fuel;
|
||||
|
||||
import WayofTime.bloodmagic.item.ItemComponent;
|
||||
import WayofTime.bloodmagic.registry.ModItems;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.IFuelHandler;
|
||||
|
||||
public class FuelHandler implements IFuelHandler
|
||||
{
|
||||
@Override
|
||||
public int getBurnTime(ItemStack fuel)
|
||||
{
|
||||
if (fuel != null && fuel.getItem() == ModItems.itemComponent && fuel.getMetadata() == ItemComponent.getStack(ItemComponent.SAND_COAL).getMetadata())
|
||||
{
|
||||
return 1600;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -45,6 +45,9 @@ public class ItemComponent extends Item implements IVariantProvider
|
|||
public static final String SAND_IRON = "ironSand";
|
||||
public static final String SAND_GOLD = "goldSand";
|
||||
public static final String SAND_COAL = "coalSand";
|
||||
public static final String PLANT_OIL = "plantOil";
|
||||
public static final String SULFUR = "sulfur";
|
||||
public static final String SALTPETER = "saltpeter";
|
||||
|
||||
public ItemComponent()
|
||||
{
|
||||
|
@ -81,6 +84,9 @@ public class ItemComponent extends Item implements IVariantProvider
|
|||
names.add(19, SAND_IRON);
|
||||
names.add(20, SAND_GOLD);
|
||||
names.add(21, SAND_COAL);
|
||||
names.add(22, PLANT_OIL);
|
||||
names.add(23, SULFUR);
|
||||
names.add(24, SALTPETER);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -29,6 +29,7 @@ public class ItemCuttingFluid extends Item implements IVariantProvider, ICustomA
|
|||
private static ArrayList<String> names = new ArrayList<String>();
|
||||
|
||||
public static final String BASIC = "basicCuttingFluid";
|
||||
public static final String EXPLOSIVE = "explosive";
|
||||
|
||||
public ItemCuttingFluid()
|
||||
{
|
||||
|
@ -53,6 +54,7 @@ public class ItemCuttingFluid extends Item implements IVariantProvider, ICustomA
|
|||
private void buildItemList()
|
||||
{
|
||||
names.add(0, BASIC);
|
||||
names.add(1, EXPLOSIVE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -105,6 +107,8 @@ public class ItemCuttingFluid extends Item implements IVariantProvider, ICustomA
|
|||
{
|
||||
case 0:
|
||||
return 16;
|
||||
case 1:
|
||||
return 64;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
package WayofTime.bloodmagic.proxy;
|
||||
|
||||
import WayofTime.bloodmagic.api.ritual.CapabilityRuneType;
|
||||
import WayofTime.bloodmagic.api.ritual.IRitualStone;
|
||||
import WayofTime.bloodmagic.api.teleport.TeleportQueue;
|
||||
import WayofTime.bloodmagic.util.handler.EventHandler;
|
||||
import WayofTime.bloodmagic.util.helper.InventoryRenderHelper;
|
||||
import WayofTime.bloodmagic.util.helper.InventoryRenderHelperV2;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.capabilities.CapabilityManager;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import WayofTime.bloodmagic.api.ritual.CapabilityRuneType;
|
||||
import WayofTime.bloodmagic.api.ritual.IRitualStone;
|
||||
import WayofTime.bloodmagic.api.teleport.TeleportQueue;
|
||||
import WayofTime.bloodmagic.fuel.FuelHandler;
|
||||
import WayofTime.bloodmagic.util.handler.EventHandler;
|
||||
import WayofTime.bloodmagic.util.helper.InventoryRenderHelper;
|
||||
import WayofTime.bloodmagic.util.helper.InventoryRenderHelperV2;
|
||||
|
||||
public class CommonProxy
|
||||
{
|
||||
|
@ -29,6 +31,7 @@ public class CommonProxy
|
|||
{
|
||||
MinecraftForge.EVENT_BUS.register(new EventHandler());
|
||||
MinecraftForge.EVENT_BUS.register(TeleportQueue.getInstance());
|
||||
GameRegistry.registerFuelHandler(new FuelHandler());
|
||||
registerRenderers();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import net.minecraft.inventory.EntityEquipmentSlot;
|
|||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.util.EnumHelper;
|
||||
import net.minecraftforge.fml.common.IFuelHandler;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.ConfigHandler;
|
||||
|
@ -187,7 +188,7 @@ public class ModItems
|
|||
ritualReader = registerItem(new ItemRitualReader(), Constants.BloodMagicItem.RITUAL_READER.getRegName());
|
||||
|
||||
lavaCrystal = registerItem(new ItemLavaCrystal(), Constants.BloodMagicItem.LAVA_CRYSTAL.getRegName());
|
||||
GameRegistry.registerFuelHandler(new ItemLavaCrystal());
|
||||
GameRegistry.registerFuelHandler((IFuelHandler) lavaCrystal);
|
||||
|
||||
boundSword = registerItem(new ItemBoundSword(), Constants.BloodMagicItem.BOUND_SWORD.getRegName());
|
||||
boundPickaxe = registerItem(new ItemBoundPickaxe(), Constants.BloodMagicItem.BOUND_PICKAXE.getRegName());
|
||||
|
|
|
@ -283,16 +283,31 @@ public class ModRecipes
|
|||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.FLINT, 2), 0, 20, 0, Blocks.GRAVEL, Items.FLINT);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.LEATHER, 4), 100, 200, 1, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.FLINT, Items.WATER_BUCKET);
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE), 500, 200, 1, Items.GUNPOWDER, Items.GUNPOWDER, "dustCoal");
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.BREAD), 100, 200, 1, Items.WHEAT, Items.SUGAR);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.GRASS), 200, 200, 1, Blocks.DIRT, new ItemStack(Items.DYE, 1, 15), Items.WHEAT_SEEDS);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.SAND, 2), 50, 50, 1, "cobblestone", Items.GUNPOWDER);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.CLAY_BALL, 4), 50, 100, 2, Items.WATER_BUCKET, "sand");
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.CLAY, 5), 200, 200, 1, Items.WATER_BUCKET, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.OBSIDIAN), 50, 50, 1, Items.WATER_BUCKET, Items.LAVA_BUCKET);
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", Items.GUNPOWDER, Items.REDSTONE, Items.SUGAR, Items.WHEAT, new ItemStack(Items.POTIONITEM));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.SULFUR, 8), 0, 100, 0, Items.LAVA_BUCKET);
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.SALTPETER, 4), 0, 100, 0, ItemComponent.getStack(ItemComponent.PLANT_OIL), ItemComponent.getStack(ItemComponent.PLANT_OIL), "dustCoal");
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.GUNPOWDER, 3), 0, 100, 0, ItemComponent.getStack(ItemComponent.SALTPETER), ItemComponent.getStack(ItemComponent.SULFUR), new ItemStack(Items.COAL, 1, 1));
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_IRON, 2), 100, 200, 1, "oreIron", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_GOLD, 2), 100, 200, 1, "oreGold", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_COAL, 4), 100, 100, 1, new ItemStack(Items.COAL, 1, 0), new ItemStack(Items.COAL, 1, 0), Items.FLINT));
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", Items.GUNPOWDER, Items.REDSTONE, Items.SUGAR, ItemComponent.getStack(ItemComponent.PLANT_OIL), new ItemStack(Items.POTIONITEM));
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_IRON, 2), 400, 200, 1, "oreIron", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_GOLD, 2), 400, 200, 1, "oreGold", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)));
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.GRAVEL), 50, 50, 1, "cobblestone", ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE)));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.SAND), 50, 50, 1, Blocks.GRAVEL, ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE)));
|
||||
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.CARROT, Items.CARROT, Items.CARROT, new ItemStack(Items.DYE, 1, 15));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.POTATO, Items.POTATO, new ItemStack(Items.DYE, 1, 15));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.WHEAT, Items.WHEAT, new ItemStack(Items.DYE, 1, 15));
|
||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -115,6 +115,21 @@
|
|||
"textures": {
|
||||
"layer0": "bloodmagic:items/CoalSand"
|
||||
}
|
||||
},
|
||||
"plantoil": {
|
||||
"textures": {
|
||||
"layer0": "bloodmagic:items/PlantOil"
|
||||
}
|
||||
},
|
||||
"sulfur": {
|
||||
"textures": {
|
||||
"layer0": "bloodmagic:items/Sulfur"
|
||||
}
|
||||
},
|
||||
"saltpeter": {
|
||||
"textures": {
|
||||
"layer0": "bloodmagic:items/Saltpeter"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,12 @@
|
|||
"textures": {
|
||||
"layer0": "bloodmagic:items/BasicCuttingFluid"
|
||||
}
|
||||
}
|
||||
},
|
||||
"explosive": {
|
||||
"textures": {
|
||||
"layer0": "bloodmagic:items/ExplosivePowder"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,8 +90,12 @@ item.BloodMagic.baseComponent.reagentTransposition.name=Transposition Reagent
|
|||
item.BloodMagic.baseComponent.ironSand.name=Iron Sand
|
||||
item.BloodMagic.baseComponent.goldSand.name=Gold Sand
|
||||
item.BloodMagic.baseComponent.coalSand.name=Coal Sand
|
||||
item.BloodMagic.baseComponent.plantOil.name=Plant Oil
|
||||
item.BloodMagic.baseComponent.sulfur.name=Sulfur
|
||||
item.BloodMagic.baseComponent.saltpeter.name=Saltpeter
|
||||
|
||||
item.BloodMagic.cuttingFluid.basicCuttingFluid.name=Basic Cutting Fluid
|
||||
item.BloodMagic.cuttingFluid.explosive.name=Explosive Powder
|
||||
|
||||
item.BloodMagic.demonCrystal.crystalDefault.name=Demon Will Crystal
|
||||
item.BloodMagic.demonCrystal.crystalCorrosive.name=Corrosive Will Crystal
|
||||
|
|
|
@ -87,6 +87,14 @@ item.BloodMagic.baseComponent.reagentSeverance.name=隔绝试剂
|
|||
item.BloodMagic.baseComponent.reagentTeleposition.name=传送试剂
|
||||
item.BloodMagic.baseComponent.reagentTransposition.name=移位试剂
|
||||
|
||||
item.BloodMagic.baseComponent.ironSand.name=铁矿砂
|
||||
item.BloodMagic.baseComponent.goldSand.name=金矿砂
|
||||
item.BloodMagic.baseComponent.coalSand.name=煤矿砂
|
||||
item.BloodMagic.baseComponent.plantOil.name=植物油
|
||||
|
||||
item.BloodMagic.cuttingFluid.basicCuttingFluid.name=基础切削油
|
||||
item.BloodMagic.cuttingFluid.explosive.name=爆炸火药
|
||||
|
||||
item.BloodMagic.demonCrystal.crystalDefault.name=邪灵魂魄晶体
|
||||
item.BloodMagic.demonCrystal.crystalCorrosive.name=腐蚀魂魄晶体
|
||||
item.BloodMagic.demonCrystal.crystalDestructive.name=恶意魂魄晶体
|
||||
|
@ -137,11 +145,11 @@ item.BloodMagic.upgradeTome.name=束灵盔甲强化手册
|
|||
item.BloodMagic.upgradeTrainer.name=束灵盔甲训练手镯
|
||||
|
||||
item.BloodMagic.sentientSword.name=感知之剑
|
||||
item.BloodMagic.soulGem.petty.name=[微小]醇酒之晶
|
||||
item.BloodMagic.soulGem.lesser.name=[细块]醇酒之晶
|
||||
item.BloodMagic.soulGem.common.name=[普通]醇酒之晶
|
||||
item.BloodMagic.soulGem.greater.name=[较大]醇酒之晶
|
||||
item.BloodMagic.soulGem.grand.name=[精制]醇酒之晶
|
||||
item.BloodMagic.soulGem.petty.name=[微小]冥界宝石
|
||||
item.BloodMagic.soulGem.lesser.name=[细块]冥界宝石
|
||||
item.BloodMagic.soulGem.common.name=[普通]冥界宝石
|
||||
item.BloodMagic.soulGem.greater.name=[较大]冥界宝石
|
||||
item.BloodMagic.soulGem.grand.name=[精制]冥界宝石
|
||||
item.BloodMagic.soulSnare.base.name=原始投网
|
||||
item.BloodMagic.sentientBow.name=感知之弓
|
||||
item.BloodMagic.sentientArmourGem.name=感知盔甲宝石
|
||||
|
@ -195,9 +203,10 @@ tile.BloodMagic.incenseAltar.name=熏香祭坛
|
|||
|
||||
tile.BloodMagic.teleposer.name=传送器
|
||||
tile.BloodMagic.soulForge.name=狱火熔炉
|
||||
tile.BloodMagic.demonCrucible.name=恶魔坩埚
|
||||
tile.BloodMagic.demonPylon.name=恶魔集能塔
|
||||
tile.BloodMagic.demonCrystallizer.name=恶魔结晶坛
|
||||
tile.BloodMagic.alchemyTable.name=炼金术桌
|
||||
tile.BloodMagic.demonCrucible.name=邪灵坩埚
|
||||
tile.BloodMagic.demonPylon.name=邪灵导能塔
|
||||
tile.BloodMagic.demonCrystallizer.name=邪灵结晶坛
|
||||
|
||||
tile.BloodMagic.masterRouting.name=主路由节点
|
||||
tile.BloodMagic.outputRouting.name=输出路由节点
|
||||
|
@ -335,6 +344,7 @@ tooltip.BloodMagic.livingArmour.upgrade.fallProtect=柔和落叶
|
|||
tooltip.BloodMagic.livingArmour.upgrade.graveDigger=掘墓者
|
||||
tooltip.BloodMagic.livingArmour.upgrade.sprintAttack=冲撞击打
|
||||
tooltip.BloodMagic.livingArmour.upgrade.criticalStrike=精准击打
|
||||
tooltip.BloodMagic.livingArmour.upgrade.elytra=鞘翅
|
||||
tooltip.BloodMagic.livingArmour.upgrade.level=%s (Level %d)
|
||||
tooltip.BloodMagic.livingArmour.upgrade.points=&6强化点数: %s / %s
|
||||
|
||||
|
@ -369,8 +379,10 @@ tooltip.BloodMagic.experienceTome=用于储存经验的书
|
|||
tooltip.BloodMagic.experienceTome.exp=经验值: %0.3f
|
||||
tooltip.BloodMagic.experienceTome.expLevel=等级: %d
|
||||
|
||||
tooltip.BloodMagic.decoration.safe=Safe for decoration
|
||||
tooltip.BloodMagic.decoration.notSafe=Dangerous for decoration
|
||||
tooltip.BloodMagic.decoration.safe=安全装潢
|
||||
tooltip.BloodMagic.decoration.notSafe=危险装潢
|
||||
|
||||
tooltip.BloodMagic.cuttingFluidRatio=%d/%d 所剩可用
|
||||
|
||||
# Ritual
|
||||
ritual.BloodMagic.blockRange.tooBig=提供的方块范围过大! 最多不超过 %s 个方块.
|
||||
|
@ -409,7 +421,7 @@ ritual.BloodMagic.placerRitual=铺设仪式
|
|||
ritual.BloodMagic.fellingRitual=伐林仪式
|
||||
ritual.BloodMagic.pumpRitual=虹吸圣曲
|
||||
ritual.BloodMagic.altarBuilderRitual=祭坛集结号
|
||||
ritual.BloodMagic.portalRitual=折域大门
|
||||
ritual.BloodMagic.portalRitual=折域之门
|
||||
|
||||
|
||||
ritual.BloodMagic.waterRitual.info=通过主仪式石生成一个水源方块.
|
||||
|
@ -559,12 +571,15 @@ jei.BloodMagic.recipe.altar=血之祭坛
|
|||
jei.BloodMagic.recipe.binding=炼金矩阵 (绑定)
|
||||
jei.BloodMagic.recipe.alchemyArrayCrafting=炼金矩阵
|
||||
jei.BloodMagic.recipe.soulForge=狱火熔炉
|
||||
jei.BloodMagic.recipe.alchemyTable=炼金术桌
|
||||
jei.BloodMagic.recipe.requiredLP=LP: %,d
|
||||
jei.BloodMagic.recipe.requiredTier=层级: %d
|
||||
jei.BloodMagic.recipe.consumptionRate=消耗率: %,d LP/t
|
||||
jei.BloodMagic.recipe.drainRate=消耗率: %,d LP/t
|
||||
jei.BloodMagic.recipe.minimumSouls=Minimum: %1$,.2f Will
|
||||
jei.BloodMagic.recipe.soulsDrained=Drained: %1$,.2f Will
|
||||
jei.BloodMagic.recipe.minimumSouls=最小值: %1$,.2f Will
|
||||
jei.BloodMagic.recipe.soulsDrained=消耗: %1$,.2f Will
|
||||
jei.BloodMagic.recipe.lpDrained=消耗: %,d LP
|
||||
jei.BloodMagic.recipe.ticksRequired=时间: %,d 刻
|
||||
|
||||
jei.BloodMagic.desc.altarBuilder=该物品仅限创造模式,用于调试测试.\n\nShift + 右键 改变层级. 右键祭坛开始搭建.\n\n手持破坏祭坛时将全部移除.
|
||||
jei.BloodMagic.desc.demonicWill=一个由恶魔附身于生物而形成的纹刻.\n\n可以通过用感知武器杀死生物掉落, 或是对着生物抛掷原始投网, 当它出现白色颗粒时杀了它.
|
||||
|
@ -585,4 +600,4 @@ tc.research_category.BLOODMAGIC=血红奥术
|
|||
# Thaumcraft Research
|
||||
bloodmagic.research_name.BLOODMAGIC=血魔法
|
||||
bloodmagic.research_text.BLOODMAGIC=血红奥术
|
||||
bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all!
|
||||
bloodmagic.research_page.BLOODMAGIC.1=血魔法的领域总是似乎有些孤立且像是"个人"艺术, 同众所周知的喜爱隐居有时还有点疯癫的血魔法师. 然而, 自我牺牲与生命本质的力量甚至拥有超出一般血魔法师所见的用途, 事实上, 这种力量显然终究能应用于神秘学.
|
||||
|
|
Loading…
Reference in a new issue