From 81e5cea038dee9022c524927326dbec9bff05a37 Mon Sep 17 00:00:00 2001 From: MCTBL <30978504+MCTBL@users.noreply.github.com> Date: Wed, 4 Sep 2024 17:28:53 +0800 Subject: [PATCH] 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 * Update zh_CN.lang * fix and add comments, fix en_US.lang --------- Co-authored-by: Alexander Anishin --- settings.gradle | 2 +- .../thaumicenergistics/api/IThEBlocks.java | 6 + .../RenderBlockAdvancedInfusionProvider.java | 26 +++ .../client/textures/BlockTextureManager.java | 3 + .../blocks/BlockAdvancedInfusionProvider.java | 99 +++++++++ .../common/blocks/BlockEnum.java | 1 + .../FeatureAdvancedInfusionProvider.java | 106 ++++++++++ .../common/registries/FeatureRegistry.java | 9 + .../common/registries/RecipeRegistry.java | 1 + .../common/registries/Renderers.java | 9 +- .../common/registries/ResearchRegistry.java | 1 + .../common/registries/ThEStrings.java | 5 + .../tiles/TileAdvancedInfusionProvider.java | 198 ++++++++++++++++++ .../common/tiles/TileEnum.java | 1 + .../common/tiles/TileInfusionProvider.java | 2 +- .../tiles/abstraction/TileProviderBase.java | 4 +- .../implementaion/ThEBlocks.java | 1 + .../assets/thaumicenergistics/lang/en_US.lang | 10 + .../assets/thaumicenergistics/lang/zh_CN.lang | 10 + .../blocks/advanced.infusion.provider.png | Bin 0 -> 2630 bytes 20 files changed, 489 insertions(+), 5 deletions(-) create mode 100644 src/main/java/thaumicenergistics/client/render/RenderBlockAdvancedInfusionProvider.java create mode 100644 src/main/java/thaumicenergistics/common/blocks/BlockAdvancedInfusionProvider.java create mode 100644 src/main/java/thaumicenergistics/common/features/FeatureAdvancedInfusionProvider.java create mode 100644 src/main/java/thaumicenergistics/common/tiles/TileAdvancedInfusionProvider.java create mode 100644 src/main/resources/assets/thaumicenergistics/textures/blocks/advanced.infusion.provider.png diff --git a/settings.gradle b/settings.gradle index 54797868..242692e5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.25' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.26' } diff --git a/src/main/java/thaumicenergistics/api/IThEBlocks.java b/src/main/java/thaumicenergistics/api/IThEBlocks.java index c83b7ecb..24ae387b 100644 --- a/src/main/java/thaumicenergistics/api/IThEBlocks.java +++ b/src/main/java/thaumicenergistics/api/IThEBlocks.java @@ -46,6 +46,12 @@ public abstract class IThEBlocks { @Nonnull public IThEItemDescription InfusionProvider; + /** + * Advanced Infusion Provider. + */ + @Nonnull + public IThEItemDescription AdvancedInfusionProvider; + /** * Iron Gearbox. */ diff --git a/src/main/java/thaumicenergistics/client/render/RenderBlockAdvancedInfusionProvider.java b/src/main/java/thaumicenergistics/client/render/RenderBlockAdvancedInfusionProvider.java new file mode 100644 index 00000000..e6ae9314 --- /dev/null +++ b/src/main/java/thaumicenergistics/client/render/RenderBlockAdvancedInfusionProvider.java @@ -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; + } +} diff --git a/src/main/java/thaumicenergistics/client/textures/BlockTextureManager.java b/src/main/java/thaumicenergistics/client/textures/BlockTextureManager.java index 6eb64e3e..ed2d3f58 100644 --- a/src/main/java/thaumicenergistics/client/textures/BlockTextureManager.java +++ b/src/main/java/thaumicenergistics/client/textures/BlockTextureManager.java @@ -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" }), diff --git a/src/main/java/thaumicenergistics/common/blocks/BlockAdvancedInfusionProvider.java b/src/main/java/thaumicenergistics/common/blocks/BlockAdvancedInfusionProvider.java new file mode 100644 index 00000000..2e463f75 --- /dev/null +++ b/src/main/java/thaumicenergistics/common/blocks/BlockAdvancedInfusionProvider.java @@ -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(); + } + } +} diff --git a/src/main/java/thaumicenergistics/common/blocks/BlockEnum.java b/src/main/java/thaumicenergistics/common/blocks/BlockEnum.java index c81cfda0..a155f33e 100644 --- a/src/main/java/thaumicenergistics/common/blocks/BlockEnum.java +++ b/src/main/java/thaumicenergistics/common/blocks/BlockEnum.java @@ -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()), diff --git a/src/main/java/thaumicenergistics/common/features/FeatureAdvancedInfusionProvider.java b/src/main/java/thaumicenergistics/common/features/FeatureAdvancedInfusionProvider.java new file mode 100644 index 00000000..06716385 --- /dev/null +++ b/src/main/java/thaumicenergistics/common/features/FeatureAdvancedInfusionProvider.java @@ -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); + + } + +} diff --git a/src/main/java/thaumicenergistics/common/registries/FeatureRegistry.java b/src/main/java/thaumicenergistics/common/registries/FeatureRegistry.java index 8b483bc6..fdcf3fff 100644 --- a/src/main/java/thaumicenergistics/common/registries/FeatureRegistry.java +++ b/src/main/java/thaumicenergistics/common/registries/FeatureRegistry.java @@ -4,6 +4,7 @@ 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 @@ private 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()); diff --git a/src/main/java/thaumicenergistics/common/registries/RecipeRegistry.java b/src/main/java/thaumicenergistics/common/registries/RecipeRegistry.java index d90b15e1..28c99814 100644 --- a/src/main/java/thaumicenergistics/common/registries/RecipeRegistry.java +++ b/src/main/java/thaumicenergistics/common/registries/RecipeRegistry.java @@ -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; } diff --git a/src/main/java/thaumicenergistics/common/registries/Renderers.java b/src/main/java/thaumicenergistics/common/registries/Renderers.java index 72f54263..7c8284c6 100644 --- a/src/main/java/thaumicenergistics/common/registries/Renderers.java +++ b/src/main/java/thaumicenergistics/common/registries/Renderers.java @@ -7,6 +7,7 @@ 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 static void registerRenderers() { // 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 diff --git a/src/main/java/thaumicenergistics/common/registries/ResearchRegistry.java b/src/main/java/thaumicenergistics/common/registries/ResearchRegistry.java index 90770b59..e4976f4a 100644 --- a/src/main/java/thaumicenergistics/common/registries/ResearchRegistry.java +++ b/src/main/java/thaumicenergistics/common/registries/ResearchRegistry.java @@ -74,6 +74,7 @@ public static enum ResearchTypes { 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), diff --git a/src/main/java/thaumicenergistics/common/registries/ThEStrings.java b/src/main/java/thaumicenergistics/common/registries/ThEStrings.java index 2d9379a5..87f2d36a 100644 --- a/src/main/java/thaumicenergistics/common/registries/ThEStrings.java +++ b/src/main/java/thaumicenergistics/common/registries/ThEStrings.java @@ -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), diff --git a/src/main/java/thaumicenergistics/common/tiles/TileAdvancedInfusionProvider.java b/src/main/java/thaumicenergistics/common/tiles/TileAdvancedInfusionProvider.java new file mode 100644 index 00000000..2b06af29 --- /dev/null +++ b/src/main/java/thaumicenergistics/common/tiles/TileAdvancedInfusionProvider.java @@ -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 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(); + } + } + +} diff --git a/src/main/java/thaumicenergistics/common/tiles/TileEnum.java b/src/main/java/thaumicenergistics/common/tiles/TileEnum.java index 20f4519f..55454003 100644 --- a/src/main/java/thaumicenergistics/common/tiles/TileEnum.java +++ b/src/main/java/thaumicenergistics/common/tiles/TileEnum.java @@ -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), diff --git a/src/main/java/thaumicenergistics/common/tiles/TileInfusionProvider.java b/src/main/java/thaumicenergistics/common/tiles/TileInfusionProvider.java index ac2c9b96..d7cfc92f 100644 --- a/src/main/java/thaumicenergistics/common/tiles/TileInfusionProvider.java +++ b/src/main/java/thaumicenergistics/common/tiles/TileInfusionProvider.java @@ -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; diff --git a/src/main/java/thaumicenergistics/common/tiles/abstraction/TileProviderBase.java b/src/main/java/thaumicenergistics/common/tiles/abstraction/TileProviderBase.java index 6c39f678..3f60871e 100644 --- a/src/main/java/thaumicenergistics/common/tiles/abstraction/TileProviderBase.java +++ b/src/main/java/thaumicenergistics/common/tiles/abstraction/TileProviderBase.java @@ -48,7 +48,7 @@ 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 boolean orderSomeEssentia(final Aspect aspect, final int amount) { if (!craftingGrid.isRequesting(itemStack)) { return this.craftingTracker.handleCrafting( 0, - 32, + amount, itemStack, this.getWorldObj(), grid, diff --git a/src/main/java/thaumicenergistics/implementaion/ThEBlocks.java b/src/main/java/thaumicenergistics/implementaion/ThEBlocks.java index 8f6e4a41..b21113e3 100644 --- a/src/main/java/thaumicenergistics/implementaion/ThEBlocks.java +++ b/src/main/java/thaumicenergistics/implementaion/ThEBlocks.java @@ -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()); diff --git a/src/main/resources/assets/thaumicenergistics/lang/en_US.lang b/src/main/resources/assets/thaumicenergistics/lang/en_US.lang index 98834d79..f90da50e 100644 --- a/src/main/resources/assets/thaumicenergistics/lang/en_US.lang +++ b/src/main/resources/assets/thaumicenergistics/lang/en_US.lang @@ -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.
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.
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.
Now you have a new idea, why not leave the task of preparing essentia to your ME network?
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 diff --git a/src/main/resources/assets/thaumicenergistics/lang/zh_CN.lang b/src/main/resources/assets/thaumicenergistics/lang/zh_CN.lang index 86d34236..649c6d57 100644 --- a/src/main/resources/assets/thaumicenergistics/lang/zh_CN.lang +++ b/src/main/resources/assets/thaumicenergistics/lang/zh_CN.lang @@ -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=通过研究源质注魔的过程,你发现了能用于注魔的源质瞬间数字化与数字瞬间源质化的方法.
将注魔供应器邻近神秘装置放置,装置就能直接从网络中抽取源质,就像是要素罐子一样.对注魔祭坛来说这十分实用. +# Research Advanced Infusion Provider +tc.research_name.thaumicenergistics.TEADVINFPROV=进阶注魔供应器 +tc.research_text.thaumicenergistics.TEADVINFPROV=极简化注魔. +thaumicenergistics.research_page.TEADVINFPROV.1=当你不断的优化自己的网络合成自动化时,你无数次的被注魔时需要的要素源质的制作给难住了.
现在,你有了全新的想法,不如把计算源质合成的任务交给ME网络来做?
于是你开发出了新的注魔供应器,包含截流者的功能,且能自动下单缺失的源质,会在自身为中心9*9*9空间搜索矩阵自动绑定.右键可以让他重新搜索区域内的矩阵并重新绑定. + # Research Vis Interface tc.research_name.thaumicenergistics.TEVISINT=要素中继接口 tc.research_text.thaumicenergistics.TEVISINT=数位化使用要素魔力 diff --git a/src/main/resources/assets/thaumicenergistics/textures/blocks/advanced.infusion.provider.png b/src/main/resources/assets/thaumicenergistics/textures/blocks/advanced.infusion.provider.png new file mode 100644 index 0000000000000000000000000000000000000000..b082ce85e0618982d0a291597b9e8fceace3aeef GIT binary patch literal 2630 zcmb_e3v?9K8J;DAA%!%A6)D)Baily9vpX|8yE`*s6V}}{*_I7!SRp{#W_BLQ%I?lE zGkH=D53435L=#?B%#mOqplA(kj2I$vAiyaIiU~~!P*AZvg24uCAPBvi#}-?(98c$* znYnZCcmMzU|Np!9PN^q7b#%;x7zlz!yV9H);0=fG=waY_Yy6ehz-y$OHeZFH*!|&K zw=N-eA_R^2i{G26Wx8iEoD?*$yyO!Mg+UphA!tT&q0DlN1P%5HIsT9h>2BJCz<%C_ z%rm<&x9kvd{b|LDFsC@(%M~x;XdX#Uf@c&mz(7#YShz442&qh=4e7VbfOfdsh`{|2 zZIKPJhaJM1ZV&8`6ah9HEGUPQX4py_aEpng>FF?m;gk`hjJOHKEewe<1OX3T2=J!x zB9r0##h@?nWkYf`O=gV7f`S4=fyp2#IYykOX(L7$2?7NOR4oc=Y#|y_9~-jZ6jV;} z%bH&b!C{N6Ps-D52w*x8LQsyF4XJ}^0tqt~va%63VBwJZfjk$%$$3hk-#O12g@6zg zLYfM&cmylwN}8nRO5b5RGW;zEAhm9H#K%3k1cMP5s+N)u!Wc}*J<+PSNEVD4f-2=H zoRE?aXg(H>MrIs}z-p4>m88H>p*%yBVTU7J7#f~B&mZEY0(IJ5a|9==2{wel2v9N{ zCCpx&W(ZI_Isu~?3>$#DCEhOWP@o!~)!6?D<~c@`lpqUY z_6OMP%~1WfL$pL3r<@sC}F_+>AKyF zE2L^{h!b2+8v^oU@cVhjN|B<-;bxTNtRgC6B!#k8Glp736VGEl5sXIWJ0&hJtb*|T zfd#=!9I)|kdLm7V6v5&sYcdNc;Uh(qCO96YtR!YK`zXRJ(nD-!D}Jyh*}&aa!>o8< zQRHZm6$J_1&S7MA3^wtu=4xG#H9IEQ0Ah+wKPXqJlG2O;eP!v zEEirEHiQccLg10XZvQ>9L=Mwg`!cjK$=k+ocg)WM!3Sxie+o zS5Ys6KKt1Vr#@Pkc1u^Qt*zIUmBdU_&IVpR_C9r{roHbU2kDZ`-M)qe zA2xSb6MF*h^c{NO#aWZ^nAPfjZtD4UctvLvmf$m_)y^3<^ZZkGKCkf#fwASl%Rk4Z255di*?ZQLxR4(F1zBd^SbsX z)i5W6i9J^`8{3{b^0Ujod&pTCz4giKg^!e!Kyf;VJF?LCsPdDRNAf=|k9Q%{w#=XY z;FPxFQuQdOyo)A!H+@MuR!pkeSF@|AwLNj~vlV5dZoXHlG~`FSH@@und{m>5@I}Iz z<*lc!FHBg{@JvHB`pwtt>+?Ok|5U%hY<;12tv*XeoSCM@1ImEu17^V7}z=IQmV&YJBbP%&D+GWF}z@c0`k%k^sSh>JxV(t@|*8@jZk+qxdUxqkF>+R={3D>+!S6x0-H8RgGWdY