mirror of
https://github.com/GTNewHorizons/ThaumicEnergistics.git
synced 2026-10-25 20:32:27 +00:00
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:
1 parent
d96e256f6a
commit
81e5cea038
20 files changed
+489
-5
No files matched your search
+1
-1
@@ -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.
|
||||
*/
|
||||
|
||||
+26
@@ -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()),
|
||||
|
||||
+106
@@ -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=数位化使用要素魔力
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
Reference in new issue
Block a user