Advanced infusion provider (#72)

* Add block,tile,texture,lang

* make new provider can provide essentia

* Code Optimization

* if fail to bind matrix will clear old XYZ for matrix

* spotless

* mark dirty after unbind

* add research, recipe and change texture

* Update en_US.lang

Co-authored-by: Alexander Anishin <oneeyemaker@gmail.com>

* Update zh_CN.lang

* fix and add comments, fix en_US.lang

---------

Co-authored-by: Alexander Anishin <oneeyemaker@gmail.com>
This commit is contained in:
MCTBLandAlexander Anishin authored and GitHub committed 2024-09-04 11:28:53 +02:00
1 parent d96e256f6a
commit 81e5cea038
20 files changed
+489 -5

No files matched your search

+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.25'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.26'
}
@@ -46,6 +46,12 @@ public abstract class IThEBlocks {
@Nonnull
public IThEItemDescription InfusionProvider;
/**
* Advanced Infusion Provider.
*/
@Nonnull
public IThEItemDescription AdvancedInfusionProvider;
/**
* Iron Gearbox.
*/
@@ -0,0 +1,26 @@
package thaumicenergistics.client.render;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import thaumicenergistics.client.textures.BlockTextureManager;
import thaumicenergistics.common.registries.Renderers;
import thaumicenergistics.common.tiles.TileInfusionProvider;
/**
* Renders the {@link TileInfusionProvider}
*
* @author MCTBL
*
*/
@SideOnly(Side.CLIENT)
public class RenderBlockAdvancedInfusionProvider extends RenderBlockProviderBase {
public RenderBlockAdvancedInfusionProvider() {
super(BlockTextureManager.ADVANCED_INFUSION_PROVIDER);
}
@Override
public int getRenderId() {
return Renderers.AdvancedInfusionProviderRenderID;
}
}
@@ -45,6 +45,9 @@ public enum BlockTextureManager {
INFUSION_PROVIDER(TextureTypes.Block, new String[] { "infusion.provider", "infusion.provider.overlay" }),
ADVANCED_INFUSION_PROVIDER(TextureTypes.Block,
new String[] { "advanced.infusion.provider", "infusion.provider.overlay" }),
ARCANE_CRAFTING_TERMINAL(TextureTypes.Part,
new String[] { "arcane.crafting.overlay1", "arcane.crafting.overlay2", "arcane.crafting.overlay3",
"arcane.crafting.side", "arcane.crafting.overlay4" }),
@@ -0,0 +1,99 @@
package thaumicenergistics.common.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import thaumicenergistics.client.textures.BlockTextureManager;
import thaumicenergistics.common.registries.Renderers;
import thaumicenergistics.common.tiles.TileAdvancedInfusionProvider;
/**
* {@link TileAdvancedInfusionProvider} block.
*
* @author MCTBL
*
*/
public class BlockAdvancedInfusionProvider extends AbstractBlockProviderBase {
public BlockAdvancedInfusionProvider() {
// Call super with material machine (iron)
super(Material.iron);
// Basic hardness
this.setHardness(1.0f);
// Sound of metal
this.setStepSound(Block.soundTypeMetal);
}
/**
* Called when the provider is right-clicked
*
* @param world
* @param x
* @param y
* @param z
* @param player
* @return
*/
@Override
protected boolean onBlockActivated(final World world, final int x, final int y, final int z,
final EntityPlayer player) {
if (world.getTileEntity(x, y, z) instanceof TileAdvancedInfusionProvider taip && taip.isActive()) {
if (taip.matrix != null) {
taip.unbindMatrix();
}
taip.searchMatrix();
return true;
} else {
return false;
}
}
@Override
public TileEntity createNewTileEntity(final World world, final int metaData) {
// Create a new provider tile, passing the side to attach to
TileAdvancedInfusionProvider tile = new TileAdvancedInfusionProvider();
tile.setupProvider(metaData);
tile.searchMatrix();
// Return the tile
return tile;
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(final int side, final int metaData) {
return BlockTextureManager.ADVANCED_INFUSION_PROVIDER.getTextures()[1];
}
@SideOnly(Side.CLIENT)
@Override
public int getRenderType() {
// Provide our custom ID
return Renderers.AdvancedInfusionProviderRenderID;
}
@Override
public String getUnlocalizedName() {
return BlockEnum.ADVANCED_INFUSION_PROVIDER.getUnlocalizedName();
}
@Override
public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block neighbor) {
// Get tile entity
TileEntity tileProvider = world.getTileEntity(x, y, z);
if (tileProvider instanceof TileAdvancedInfusionProvider tP) {
// Inform our tile entity a neighbor has changed
tP.checkGridConnectionColor();
}
}
}
@@ -17,6 +17,7 @@ public enum BlockEnum {
ESSENTIA_PROVIDER(ThEStrings.Block_EssentiaProvider, new BlockEssentiaProvider()),
INFUSION_PROVIDER(ThEStrings.Block_InfusionProvider, new BlockInfusionProvider()),
ADVANCED_INFUSION_PROVIDER(ThEStrings.Block_AdvancedInfusionProvider, new BlockAdvancedInfusionProvider()),
IRON_GEAR_BOX(ThEStrings.Block_IronGearbox, new BlockGearBox()),
THAUMIUM_GEAR_BOX(ThEStrings.Block_ThaumiumGearbox, new BlockGolemGearBox()),
ESSENTIA_CELL_WORKBENCH(ThEStrings.Block_EssentiaCellWorkbench, new BlockEssentiaCellWorkbench()),
@@ -0,0 +1,106 @@
package thaumicenergistics.common.features;
import net.minecraft.item.ItemStack;
import thaumcraft.api.ThaumcraftApi;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.research.ResearchPage;
import thaumicenergistics.api.IThEConfig;
import thaumicenergistics.api.ThEApi;
import thaumicenergistics.common.blocks.BlockEnum;
import thaumicenergistics.common.registries.FeatureRegistry;
import thaumicenergistics.common.registries.RecipeRegistry;
import thaumicenergistics.common.registries.ResearchRegistry;
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
/**
* {@link TileAdvancedInfusionProvider} feature.
*
* @author MCTBL
*
*/
public class FeatureAdvancedInfusionProvider extends ThEThaumcraftResearchFeature {
public FeatureAdvancedInfusionProvider() {
super(ResearchTypes.ADVANCED_INFUSION_PROVIDER.getKey());
}
@Override
protected ThEThaumcraftResearchFeature getParentFeature() {
return FeatureRegistry.instance().featureInfusionProvider;
}
@Override
protected void registerPseudoParents() {}
@Override
protected void registerResearch() {
// What aspects does research note have
AspectList advancedInfusionProviderList = new AspectList();
advancedInfusionProviderList.add(Aspect.MECHANISM, 1);
advancedInfusionProviderList.add(Aspect.MAGIC, 1);
advancedInfusionProviderList.add(Aspect.EXCHANGE, 1);
advancedInfusionProviderList.add(Aspect.MOTION, 1);
advancedInfusionProviderList.add(Aspect.TOOL, 1);
advancedInfusionProviderList.add(Aspect.MIND, 1);
advancedInfusionProviderList.add(Aspect.SENSES, 1);
// Research icon
ItemStack advancedInfusionProviderIcon = new ItemStack(BlockEnum.ADVANCED_INFUSION_PROVIDER.getBlock(), 1);
// Research Page
ResearchPage[] advancedInfusionProviderPages = new ResearchPage[] {
new ResearchPage(ResearchTypes.ADVANCED_INFUSION_PROVIDER.getPageName(1)),
new ResearchPage(RecipeRegistry.BLOCK_ADVANCED_INFUSION_PROVIDER) };
// Create the advanced infusion provider research
ResearchTypes.ADVANCED_INFUSION_PROVIDER.createResearchItem(
advancedInfusionProviderList,
ResearchRegistry.COMPLEXITY_LARGE,
advancedInfusionProviderIcon,
advancedInfusionProviderPages);
ResearchTypes.ADVANCED_INFUSION_PROVIDER.researchItem.setParents(ResearchTypes.INFUSION_PROVIDER.getKey());
ResearchTypes.ADVANCED_INFUSION_PROVIDER.researchItem.setConcealed().setSpecial();
ResearchTypes.ADVANCED_INFUSION_PROVIDER.researchItem.registerResearchItem();
}
@Override
protected boolean checkConfigs(IThEConfig theConfig) {
return true;
}
@Override
protected Object[] getItemReqs(CommonDependantItems cdi) {
return null;
}
@Override
protected void registerCrafting(CommonDependantItems cdi) {
ItemStack DiffusionCore = ThEApi.instance().items().DiffusionCore.getStack();
ItemStack InfusionProvider = ThEApi.instance().blocks().InfusionProvider.getStack();
ItemStack AdvancedInfusionProvider = ThEApi.instance().blocks().AdvancedInfusionProvider.getStack();
// Set required aspects for infusion provider
AspectList advancedInfusionProviderList = new AspectList();
advancedInfusionProviderList.add(Aspect.MECHANISM, 64);
advancedInfusionProviderList.add(Aspect.MAGIC, 64);
advancedInfusionProviderList.add(Aspect.EXCHANGE, 64);
advancedInfusionProviderList.add(Aspect.MIND, 64);
advancedInfusionProviderList.add(Aspect.GREED, 64);
ItemStack[] advancedInfusionProviderRecipeItems = { cdi.PrimalCharm, cdi.BallanceShard, DiffusionCore,
cdi.BallanceShard, cdi.PrimalCharm, cdi.BallanceShard, DiffusionCore, cdi.BallanceShard };
RecipeRegistry.BLOCK_ADVANCED_INFUSION_PROVIDER = ThaumcraftApi.addInfusionCraftingRecipe(
this.researchKey,
AdvancedInfusionProvider,
10,
advancedInfusionProviderList,
InfusionProvider,
advancedInfusionProviderRecipeItems);
}
}
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import thaumicenergistics.common.features.CommonDependantItems;
import thaumicenergistics.common.features.FeatureACT;
import thaumicenergistics.common.features.FeatureAdvancedInfusionProvider;
import thaumicenergistics.common.features.FeatureAutocrafting_Arcane;
import thaumicenergistics.common.features.FeatureAutocrafting_Essentia;
import thaumicenergistics.common.features.FeatureCellMicroscope;
@@ -92,6 +93,11 @@ public class FeatureRegistry {
*/
public final FeatureInfusionProvider featureInfusionProvider;
/**
* Advanced Infusion provider.
*/
public final FeatureAdvancedInfusionProvider featureAdvancedInfusionProvider;
/**
* Essentia Provider.
*/
@@ -176,6 +182,9 @@ public class FeatureRegistry {
// Build infusion provider
this.featuresList.add(this.featureInfusionProvider = new FeatureInfusionProvider());
// Build infusion provider
this.featuresList.add(this.featureAdvancedInfusionProvider = new FeatureAdvancedInfusionProvider());
// Build essentia provider
this.featuresList.add(this.featureEssentiaProvider = new FeatureEssentiaProvider());
@@ -76,4 +76,5 @@ public class RecipeRegistry {
public static InfusionRecipe BLOCK_INFUSION_PROVIDER;
public static InfusionRecipe BLOCK_ESSENTIA_PROVIDER;
public static InfusionRecipe BLOCK_ARCANE_ASSEMBLER;
public static InfusionRecipe BLOCK_ADVANCED_INFUSION_PROVIDER;
}
@@ -7,6 +7,7 @@ import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import thaumicenergistics.api.ThEApi;
import thaumicenergistics.client.render.RenderBlockAdvancedInfusionProvider;
import thaumicenergistics.client.render.RenderBlockEssentiaProvider;
import thaumicenergistics.client.render.RenderBlockInfusionProvider;
import thaumicenergistics.client.render.RenderTileArcaneAssembler;
@@ -31,7 +32,7 @@ public class Renderers {
public static int currentRenderPass = 0;
public static int EssentiaProviderRenderID, InfusionProviderRenderID;
public static int EssentiaProviderRenderID, InfusionProviderRenderID, AdvancedInfusionProviderRenderID;
public static void registerRenderers() {
// Get the next render ID
@@ -42,9 +43,15 @@ public class Renderers {
// Get the next render ID
Renderers.InfusionProviderRenderID = RenderingRegistry.getNextAvailableRenderId();
// Get the next render ID
Renderers.AdvancedInfusionProviderRenderID = RenderingRegistry.getNextAvailableRenderId();
// Register the infusion provider renderer
RenderingRegistry.registerBlockHandler(new RenderBlockInfusionProvider());
// Register the advanced infusion provider renderer
RenderingRegistry.registerBlockHandler(new RenderBlockAdvancedInfusionProvider());
// Are gearbox models enabled?
if (!ThEApi.instance().config().disableGearboxModel()) {
// Register the gearbox renderer
@@ -74,6 +74,7 @@ public class ResearchRegistry {
ESSENTIA_TERMINAL("ESSTERM", -1, -4),
ESSENTIA_PROVIDER("ESSPROV", -2, -4),
INFUSION_PROVIDER("INFPROV", -5, -2),
ADVANCED_INFUSION_PROVIDER("ADVINFPROV", -7, -2),
IRON_GEARBOX("IRONGEARBOX", 4, -5),
THAUMIUM_GEARBOX("THAUMGBOX", 4, -6),
CERTUS_DUPE("CERTUSDUPE", -5, -5),
@@ -18,6 +18,7 @@ public enum ThEStrings {
// Blocks
Block_EssentiaProvider("block.essentia.provider", true),
Block_InfusionProvider("block.infusion.provider", true),
Block_AdvancedInfusionProvider("block.advanced.infusion.provider", true),
Block_IronGearbox("block.gear.box", true),
Block_ThaumiumGearbox("block.golem.gear.box", true),
Block_EssentiaCellWorkbench("block.essentia.cell.workbench", true),
@@ -75,6 +76,10 @@ public enum ThEStrings {
Tooltip_CellTypes("tooltip.essentia.cell.types", false),
Tooltip_CellContains("tooltip.essentia.cell.contains", false),
Tooltip_ArcaneAssemblerHasVis("tooltip.arcane.assembler.hasVis", false),
Tooltip_AdvancedInfusionProviderWorkingMode("tooltip.advanced.infusion.provider.working.on", false),
Tooltip_AdvancedInfusionProviderNormalMode("tooltip.advanced.infusion.provider.normal", false),
Tooltip_AdvancedInfusionProviderAdvancedMode("tooltip.advanced.infusion.provider.advanced", false),
Tooltip_AdvancedInfusionProviderBindTo("tooltip.advanced.infusion.provider.bindto", false),
// Button Tooltips
TooltipButton_VoidHeader("tooltip.button.void", false),
@@ -0,0 +1,198 @@
package thaumicenergistics.common.tiles;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.aspects.IAspectSource;
import thaumcraft.common.tiles.TileInfusionMatrix;
import thaumicenergistics.api.ThEApi;
import thaumicenergistics.common.registries.ThEStrings;
/**
* Upgrade version of {@link TileInfusionProvider} works like intercepter and old provider can auto order essential it
* need
*
* @author MCTBL
*
*/
public class TileAdvancedInfusionProvider extends TileInfusionProvider implements IAspectSource {
private static final String NBT_MATRIX_X = "MatrixX", NBT_MATRIX_Y = "MatrixY", NBT_MATRIX_Z = "MatrixZ";
public TileInfusionMatrix matrix = null;
private Integer matrixX = null, matrixY = null, matrixZ = null;
private int tickCounter = 0;
/**
* How much power does this require just to be active?
*/
@Override
protected double getIdlePowerusage() {
return 50d;
}
@Override
protected ItemStack getItemFromTile(final Object obj) {
// Return the itemstack the visually represents this tile
return ThEApi.instance().blocks().AdvancedInfusionProvider.getStack();
}
@Override
public boolean takeFromContainer(final Aspect tag, final int amount) {
// Not in advanced mode
if (this.matrix == null) {
// Can we extract the essentia from the network?
if (this.extractEssentiaFromNetwork(tag, amount, true) == amount) {
// Show partical FX
this.doParticalFX(tag.getColor());
return true;
} else {
this.orderSomeEssentia(tag);
}
}
return false;
}
public void searchMatrix() {
// If allready bind infusion matrix or worldObj is null
if (this.matrix != null || this.worldObj == null) {
// Do nothing
return;
}
int x = this.xCoord;
int y = this.yCoord;
int z = this.zCoord;
for (int dx = -4; dx <= 4; dx++) {
for (int dy = -4; dy <= 4; dy++) {
for (int dz = -4; dz <= 4; dz++) {
if (dx == 0 && dy == 0 && dz == 0) continue;
if (this.bindMatrix(x + dx, y + dy, z + dz)) {
this.matrixX = x + dx;
this.matrixY = y + dy;
this.matrixZ = z + dz;
return;
}
}
}
}
}
public boolean bindMatrix(final int x, final int y, final int z) {
if (this.worldObj != null && this.worldObj.getTileEntity(x, y, z) instanceof TileInfusionMatrix tim) {
this.matrix = tim;
this.markForUpdate();
this.saveChanges();
return true;
} else {
return false;
}
}
public boolean bindMatrix() {
return this.bindMatrix(this.matrixX, this.matrixY, this.matrixZ);
}
public void unbindMatrix() {
this.matrix = null;
this.matrixX = null;
this.matrixY = null;
this.matrixZ = null;
this.markForUpdate();
this.saveChanges();
}
public void grabAllAspects() {
if (this.matrix.getAspects().size() != 0) {
AspectList aspectList = this.matrix.getAspects().copy();
for (Aspect aspect : aspectList.getAspects()) {
if (aspect != null) {
int needAspectsAmount = aspectList.getAmount(aspect);
int extractAmount = this.extractEssentiaFromNetwork(aspect, needAspectsAmount, false);
if (needAspectsAmount != extractAmount) {
this.orderSomeEssentia(aspect, needAspectsAmount - extractAmount);
}
// Try to remove essentia from network and render runes
if (extractAmount > 0) {
this.doParticalFX(aspect.getColor());
matrix.getAspects().remove(aspect, extractAmount);
}
}
}
}
}
@Override
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void onSaveNBT(final NBTTagCompound data) {
if (this.matrix != null) {
data.setInteger(NBT_MATRIX_X, this.matrix.xCoord);
data.setInteger(NBT_MATRIX_Y, this.matrix.yCoord);
data.setInteger(NBT_MATRIX_Z, this.matrix.zCoord);
}
super.onSaveNBT(data);
}
@Override
@TileEvent(TileEventType.WORLD_NBT_READ)
public void onLoadNBT(final NBTTagCompound data) {
if (data.hasKey(NBT_MATRIX_X) && data.hasKey(NBT_MATRIX_Y) && data.hasKey(NBT_MATRIX_Z)) {
this.matrixX = data.getInteger(NBT_MATRIX_X);
this.matrixY = data.getInteger(NBT_MATRIX_Y);
this.matrixZ = data.getInteger(NBT_MATRIX_Z);
}
super.onLoadNBT(data);
}
@Override
public void addWailaInformation(List<String> tooltip) {
super.addWailaInformation(tooltip);
if (this.matrix == null) {
tooltip.add(
ThEStrings.Tooltip_AdvancedInfusionProviderWorkingMode.getLocalized() + ":"
+ ThEStrings.Tooltip_AdvancedInfusionProviderNormalMode.getLocalized());
} else {
tooltip.add(
ThEStrings.Tooltip_AdvancedInfusionProviderWorkingMode.getLocalized() + ":"
+ ThEStrings.Tooltip_AdvancedInfusionProviderAdvancedMode.getLocalized());
tooltip.add(
String.format(
ThEStrings.Tooltip_AdvancedInfusionProviderBindTo.getLocalized(),
this.matrixX,
this.matrixY,
this.matrixZ));
}
}
@TileEvent(TileEventType.TICK)
public void onTick() {
// Try binding matrix every 20 tick
if (++tickCounter % 20 == 0 && this.matrix == null && this.isActive) {
if (this.matrixX == null || this.matrixY == null || this.matrixZ == null) {
this.searchMatrix();
} else if (!this.bindMatrix()) {
this.unbindMatrix();
}
tickCounter = 0;
}
if (this.isActive && this.matrix != null) {
this.grabAllAspects();
}
}
}
@@ -14,6 +14,7 @@ public enum TileEnum {
EssentiaProvider("TileEssentiaProvider", TileEssentiaProvider.class),
InfusionProvider("TileInfusionProvider", TileInfusionProvider.class),
AdvancedInfusionProvider("TileAdvancedInfusionProvider", TileAdvancedInfusionProvider.class),
GearBox("TileGearBox", TileGearBox.class),
CellWorkbench("TileEssentiaCellWorkbench", TileEssentiaCellWorkbench.class),
ArcaneAssembler("TileArcaneAssembler", TileArcaneAssembler.class),
@@ -22,7 +22,7 @@ public class TileInfusionProvider extends TileProviderBase implements IAspectSou
*
* @param aspectColor
*/
private void doParticalFX(final int aspectColor) {
public void doParticalFX(final int aspectColor) {
// Convert each color to percentage
float red = (aspectColor & 0xFF0000) / (float) 0xFF0000;
float green = (aspectColor & 0x00FF00) / (float) 0x00FF00;
@@ -48,7 +48,7 @@ import thaumicenergistics.common.utils.EffectiveSide;
import thaumicenergistics.implementaion.ThEMultiCraftingTracker;
/**
* Base class of {@link TileEssentiaProvider} and {@link TileInfusionProvider}.
* Base class of {@link TileEssentiaProvider} and {@link TileInfusionProvider} and {@link TileAdvancedInfusionProvider}.
*
* @author Nividica
*
@@ -540,7 +540,7 @@ public abstract class TileProviderBase extends AENetworkTile
if (!craftingGrid.isRequesting(itemStack)) {
return this.craftingTracker.handleCrafting(
0,
32,
amount,
itemStack,
this.getWorldObj(),
grid,
@@ -14,6 +14,7 @@ class ThEBlocks extends IThEBlocks {
ThEBlocks() {
this.EssentiaProvider = new ThEItemDescription(BlockEnum.ESSENTIA_PROVIDER.getBlock());
this.InfusionProvider = new ThEItemDescription(BlockEnum.INFUSION_PROVIDER.getBlock());
this.AdvancedInfusionProvider = new ThEItemDescription(BlockEnum.ADVANCED_INFUSION_PROVIDER.getBlock());
this.IronGearBox = new ThEItemDescription(BlockEnum.IRON_GEAR_BOX.getBlock());
this.ThaumiumGearBox = new ThEItemDescription(BlockEnum.THAUMIUM_GEAR_BOX.getBlock());
this.EssentiaCellWorkbench = new ThEItemDescription(BlockEnum.ESSENTIA_CELL_WORKBENCH.getBlock());
@@ -8,6 +8,7 @@ thaumicenergistics.fluid.gaseous=Super Critical Fluid
#Blocks
thaumicenergistics.block.essentia.provider.name=Essentia Provider
thaumicenergistics.block.infusion.provider.name=Infusion Provider
thaumicenergistics.block.advanced.infusion.provider.name=Advanced Infusion Provider
thaumicenergistics.block.gear.box.name=Iron Gear Box
thaumicenergistics.block.golem.gear.box.name=Thaumium Gear Box
thaumicenergistics.block.essentia.cell.workbench.name=Essentia Cell Workbench
@@ -78,6 +79,10 @@ thaumicenergistics.tooltip.button.swap.armor.title=Swap Armor
thaumicenergistics.tooltip.arcane.assembler.hasVis=Contains Stored Vis
thaumicenergistics.tooltip.button.reset.aspect=Reset the aspects
thaumicenergistics.tooltip.button.reset.aspect.description=Reset the left-hand aspects table to its original state
thaumicenergistics.tooltip.advanced.infusion.provider.working.on=Workig Mode
thaumicenergistics.tooltip.advanced.infusion.provider.normal=Normal Provider
thaumicenergistics.tooltip.advanced.infusion.provider.advanced=Advanced Provider
thaumicenergistics.tooltip.advanced.infusion.provider.bindto=Bind to %s %s %s matrix
#GUI
@@ -140,6 +145,11 @@ tc.research_name.thaumicenergistics.TEINFPROV=Infusion Provider
tc.research_text.thaumicenergistics.TEINFPROV=Infusion made easier.
thaumicenergistics.research_page.TEINFPROV.1=By researching the process of essentia infusion, you have discovered a method for instantaneous conversion between digi-sentia and essentia that can be used for infusion.<BR>By placing the §lInfusion Provider§r near a thaumic device, the device can draw essentia directly from the network as if it were a warded jar.<BR>This could prove to be very useful for the infusion alter.
# Research Advanced Infusion Provider
tc.research_name.thaumicenergistics.TEADVINFPROV=Advanced Infusion Provider
tc.research_text.thaumicenergistics.TEADVINFPROV=Easiest Infusion.
thaumicenergistics.research_page.TEADVINFPROV.1=As you continue to optimize your ME network autocrafting, you've been stumped by infusion recipes countless times.<BR>Now you have a new idea, why not leave the task of preparing essentia to your ME network?<BR>So you've developed a new infusion provider that incorporates the functionality of the Interceptor and automatically orders the missing essentia. It can also bind infusion matrix in a 9*9*9 area. Right-clicking allows him to search the area for matrix and rebind it.
# Research Vis Interface
tc.research_name.thaumicenergistics.TEVISINT=Vis Relay Interface
tc.research_text.thaumicenergistics.TEVISINT=Using Vis Digitally
@@ -8,6 +8,7 @@ thaumicenergistics.fluid.gaseous=气体
#Blocks
thaumicenergistics.block.essentia.provider.name=源质供应器
thaumicenergistics.block.infusion.provider.name=注魔供应器
thaumicenergistics.block.advanced.infusion.provider.name=进阶注魔供应器
thaumicenergistics.block.gear.box.name=铁齿轮箱
thaumicenergistics.block.golem.gear.box.name=神秘齿轮箱
thaumicenergistics.block.essentia.cell.workbench.name=源质元件工作台
@@ -78,6 +79,10 @@ thaumicenergistics.tooltip.button.swap.armor.title=交换护甲
thaumicenergistics.tooltip.arcane.assembler.hasVis=已存储Vis
thaumicenergistics.tooltip.button.reset.aspect=重置源质
thaumicenergistics.tooltip.button.reset.aspect.description=重置左侧源质表格为初始状态
thaumicenergistics.tooltip.advanced.infusion.provider.working.on=工作模式
thaumicenergistics.tooltip.advanced.infusion.provider.normal=普通供应器
thaumicenergistics.tooltip.advanced.infusion.provider.advanced=进阶供应器
thaumicenergistics.tooltip.advanced.infusion.provider.bindto=绑定至 %s %s %s 矩阵
#GUI
@@ -140,6 +145,11 @@ tc.research_name.thaumicenergistics.TEINFPROV=注魔供应器
tc.research_text.thaumicenergistics.TEINFPROV=注魔更易.
thaumicenergistics.research_page.TEINFPROV.1=通过研究源质注魔的过程,你发现了能用于注魔的源质瞬间数字化与数字瞬间源质化的方法.<BR>将注魔供应器邻近神秘装置放置,装置就能直接从网络中抽取源质,就像是要素罐子一样.对注魔祭坛来说这十分实用.
# Research Advanced Infusion Provider
tc.research_name.thaumicenergistics.TEADVINFPROV=进阶注魔供应器
tc.research_text.thaumicenergistics.TEADVINFPROV=极简化注魔.
thaumicenergistics.research_page.TEADVINFPROV.1=当你不断的优化自己的网络合成自动化时,你无数次的被注魔时需要的要素源质的制作给难住了.<BR>现在,你有了全新的想法,不如把计算源质合成的任务交给ME网络来做?<BR>于是你开发出了新的注魔供应器,包含截流者的功能,且能自动下单缺失的源质,会在自身为中心9*9*9空间搜索矩阵自动绑定.右键可以让他重新搜索区域内的矩阵并重新绑定.
# Research Vis Interface
tc.research_name.thaumicenergistics.TEVISINT=要素中继接口
tc.research_text.thaumicenergistics.TEVISINT=数位化使用要素魔力
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB