From b31875c38c1292f10f39208cfa87819507782d35 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 3 Aug 2016 04:01:47 +0200 Subject: [PATCH] Added a new crafting mechanic, the Empowerer --- .../api/ActuallyAdditionsAPI.java | 5 + .../api/recipe/EmpowererRecipe.java | 38 ++++ .../mod/ActuallyAdditions.java | 2 + .../mod/blocks/BlockDisplayStand.java | 11 ++ .../mod/blocks/BlockEmpowerer.java | 100 +++++++++++ .../mod/blocks/InitBlocks.java | 4 + .../mod/blocks/render/RenderEmpowerer.java | 53 ++++++ .../mod/creative/CreativeTab.java | 3 + .../mod/items/InitItems.java | 2 + .../mod/items/lens/LensColor.java | 2 +- .../mod/items/metalists/TheCrystals.java | 16 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 10 +- .../jei/crusher/CrusherRecipeCategory.java | 4 +- .../empowerer/EmpowererRecipeCategory.java | 84 +++++++++ .../jei/empowerer/EmpowererRecipeHandler.java | 43 +++++ .../jei/empowerer/EmpowererRecipeWrapper.java | 94 ++++++++++ .../ReconstructorRecipeCategory.java | 2 +- .../mod/misc/ParticleColored.java | 2 +- .../mod/proxy/ClientProxy.java | 11 +- .../mod/recipe/EmpowererHandler.java | 31 ++++ .../tile/TileEntityAtomicReconstructor.java | 2 +- .../mod/tile/TileEntityBase.java | 2 + .../mod/tile/TileEntityDisplayStand.java | 2 +- .../mod/tile/TileEntityEmpowerer.java | 163 ++++++++++++++++++ .../mod/tile/TileEntityLeafGenerator.java | 2 +- .../mod/tile/TileEntityMiner.java | 2 +- .../actuallyadditions/mod/util/AssetUtil.java | 4 +- .../actuallyadditions/mod/util/ItemUtil.java | 15 +- .../blockstates/blockCrystalEmpowered.json | 19 ++ .../blockstates/blockEmpowerer.json | 16 ++ .../item/itemCrystalEmpoweredBlack.json | 6 + .../models/item/itemCrystalEmpoweredBlue.json | 6 + .../item/itemCrystalEmpoweredGreen.json | 6 + .../item/itemCrystalEmpoweredLightBlue.json | 6 + .../models/item/itemCrystalEmpoweredRed.json | 6 + .../item/itemCrystalEmpoweredWhite.json | 6 + .../blocks/blockCrystalEmpoweredBlack.png | Bin 0 -> 257 bytes .../blocks/blockCrystalEmpoweredBlue.png | Bin 0 -> 820 bytes .../blocks/blockCrystalEmpoweredGreen.png | Bin 0 -> 870 bytes .../blocks/blockCrystalEmpoweredLightBlue.png | Bin 0 -> 834 bytes .../blocks/blockCrystalEmpoweredRed.png | Bin 0 -> 789 bytes .../blocks/blockCrystalEmpoweredWhite.png | Bin 0 -> 375 bytes .../textures/gui/guiNEIEmpowerer.png | Bin 0 -> 1580 bytes .../items/itemCrystalEmpoweredBlack.png | Bin 0 -> 303 bytes .../items/itemCrystalEmpoweredBlue.png | Bin 0 -> 443 bytes .../items/itemCrystalEmpoweredGreen.png | Bin 0 -> 574 bytes .../items/itemCrystalEmpoweredLightBlue.png | Bin 0 -> 323 bytes .../items/itemCrystalEmpoweredRed.png | Bin 0 -> 414 bytes .../items/itemCrystalEmpoweredWhite.png | Bin 0 -> 372 bytes 49 files changed, 747 insertions(+), 33 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/recipe/EmpowererRecipe.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderEmpowerer.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeCategory.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeHandler.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EmpowererHandler.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCrystalEmpowered.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockEmpowerer.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlack.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlue.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredGreen.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredLightBlue.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredRed.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredWhite.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlack.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlue.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredGreen.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredLightBlue.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredRed.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredWhite.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiNEIEmpowerer.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredBlack.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredBlue.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredGreen.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredLightBlue.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredRed.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredWhite.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 23dbc9381..ec389a9d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -37,6 +37,7 @@ public final class ActuallyAdditionsAPI{ public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); public static final List TREASURE_CHEST_LOOT = new ArrayList(); public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList(); + public static final List EMPOWERER_RECIPES = new ArrayList(); public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap(); public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList(); public static final List COMPOST_RECIPES = new ArrayList(); @@ -181,6 +182,10 @@ public final class ActuallyAdditionsAPI{ TREASURE_CHEST_LOOT.add(new TreasureChestLoot(stack, chance, minAmount, maxAmount)); } + public static void addEmpowererRecipe(ItemStack input, ItemStack output, ItemStack modifier1, ItemStack modifier2, ItemStack modifier3, ItemStack modifier4, int energyPerStand, float[] particleColor){ + EMPOWERER_RECIPES.add(new EmpowererRecipe(input, output, modifier1, modifier2, modifier3, modifier4, energyPerStand, particleColor)); + } + /** * Adds a recipe to the Atomic Reconstructor conversion lenses * StackSizes can only be 1 and greater ones will be ignored diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/EmpowererRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/EmpowererRecipe.java new file mode 100644 index 000000000..c4ca2e5b2 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/EmpowererRecipe.java @@ -0,0 +1,38 @@ +/* + * This file ("EmpowererRecipe.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.api.recipe; + +import net.minecraft.item.ItemStack; + +public class EmpowererRecipe{ + + public ItemStack input; + public ItemStack output; + + public ItemStack modifier1; + public ItemStack modifier2; + public ItemStack modifier3; + public ItemStack modifier4; + + public int energyPerStand; + public float[] particleColor; + + public EmpowererRecipe(ItemStack input, ItemStack output, ItemStack modifier1, ItemStack modifier2, ItemStack modifier3, ItemStack modifier4, int energyPerStand, float[] particleColor){ + this.input = input; + this.output = output; + this.modifier1 = modifier1; + this.modifier2 = modifier2; + this.modifier3 = modifier3; + this.modifier4 = modifier4; + this.energyPerStand = energyPerStand; + this.particleColor = particleColor; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 20470e803..ca400bf85 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -35,6 +35,7 @@ import de.ellpeck.actuallyadditions.mod.misc.*; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.ore.InitOreDict; import de.ellpeck.actuallyadditions.mod.proxy.IProxy; +import de.ellpeck.actuallyadditions.mod.recipe.EmpowererHandler; import de.ellpeck.actuallyadditions.mod.recipe.FuelHandler; import de.ellpeck.actuallyadditions.mod.recipe.HairyBallHandler; import de.ellpeck.actuallyadditions.mod.recipe.TreasureChestHandler; @@ -134,6 +135,7 @@ public class ActuallyAdditions{ HairyBallHandler.init(); TreasureChestHandler.init(); LensRecipeHandler.init(); + EmpowererHandler.init(); InitForeignPaxels.init(); InitBooklet.postInit(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java index 85d95d5c7..06f0a2b86 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -54,6 +55,16 @@ public class BlockDisplayStand extends BlockContainerBase{ player.inventory.decrStackSize(player.inventory.currentItem, 1); return true; } + else if(ItemUtil.canBeStacked(heldItem, display)){ + int maxTransfer = Math.min(display.stackSize, heldItem.getMaxStackSize()-heldItem.stackSize); + if(maxTransfer > 0){ + heldItem.stackSize += maxTransfer; + ItemStack newDisplay = display.copy(); + newDisplay.stackSize -= maxTransfer; + stand.setInventorySlotContents(0, newDisplay.stackSize <= 0 ? null : newDisplay); + return true; + } + } } else{ if(display != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java new file mode 100644 index 000000000..89193b90e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java @@ -0,0 +1,100 @@ +/* + * This file ("BlockQuartzInfuser.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityEmpowerer; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockEmpowerer extends BlockContainerBase{ + + public BlockEmpowerer(String name){ + super(Material.ROCK, name); + + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.5F); + this.setResistance(10.0F); + this.setSoundType(SoundType.STONE); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta){ + return new TileEntityEmpowerer(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityEmpowerer empowerer = (TileEntityEmpowerer)world.getTileEntity(pos); + if(empowerer != null){ + ItemStack stackThere = empowerer.getStackInSlot(0); + if(heldItem != null){ + if(stackThere == null && TileEntityEmpowerer.getRecipeForInput(heldItem) != null){ + ItemStack toPut = heldItem.copy(); + toPut.stackSize = 1; + empowerer.setInventorySlotContents(0, toPut); + player.inventory.decrStackSize(player.inventory.currentItem, 1); + return true; + } + else if(ItemUtil.canBeStacked(heldItem, stackThere)){ + int maxTransfer = Math.min(stackThere.stackSize, heldItem.getMaxStackSize()-heldItem.stackSize); + if(maxTransfer > 0){ + heldItem.stackSize += maxTransfer; + ItemStack newStackThere = stackThere.copy(); + newStackThere.stackSize -= maxTransfer; + empowerer.setInventorySlotContents(0, newStackThere.stackSize <= 0 ? null : newStackThere); + return true; + } + } + } + else{ + if(stackThere != null){ + player.inventory.setInventorySlotContents(player.inventory.currentItem, stackThere.copy()); + empowerer.setInventorySlotContents(0, null); + return true; + } + } + } + return false; + } + else{ + return true; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state){ + this.dropInventory(worldIn, pos); + super.breakBlock(worldIn, pos, state); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 3eb07618c..af0840d30 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -104,6 +104,7 @@ public final class InitBlocks{ public static Block blockBlackLotus; public static Block blockCrystal; + public static Block blockCrystalEmpowered; public static Block blockAtomicReconstructor; public static Block blockMiner; @@ -123,12 +124,14 @@ public final class InitBlocks{ public static Block blockBookletStand; public static Block blockDisplayStand; public static Block blockShockSuppressor; + public static Block blockEmpowerer; public static Block blockTinyTorch; public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockEmpowerer = new BlockEmpowerer("blockEmpowerer"); blockTinyTorch = new BlockTinyTorch("blockTinyTorch"); blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor"); blockDisplayStand = new BlockDisplayStand("blockDisplayStand"); @@ -139,6 +142,7 @@ public final class InitBlocks{ blockMiner = new BlockMiner("blockMiner"); blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor"); blockCrystal = new BlockCrystal("blockCrystal"); + blockCrystalEmpowered = new BlockCrystal("blockCrystalEmpowered"); blockBlackLotus = new BlockBlackLotus("blockBlackLotus"); blockLaserRelay = new BlockLaserRelay("blockLaserRelay", Type.ENERGY_BASIC); blockLaserRelayAdvanced = new BlockLaserRelay("blockLaserRelayAdvanced", Type.ENERGY_ADVANCED); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderEmpowerer.java new file mode 100644 index 000000000..d7a77490e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderEmpowerer.java @@ -0,0 +1,53 @@ +/* + * This file ("RenderEmpowerer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks.render; + +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityEmpowerer; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class RenderEmpowerer extends TileEntitySpecialRenderer{ + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ + if(!(tile instanceof TileEntityEmpowerer)){ + return; + } + + ItemStack stack = ((TileEntityEmpowerer)tile).getStackInSlot(0); + if(stack != null){ + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x+0.5F, (float)y+1F, (float)z+0.5F); + + double boop = Minecraft.getSystemTime()/800D; + GlStateManager.translate(0D, Math.sin(boop%(2*Math.PI))*0.065, 0D); + GlStateManager.rotate((float)(((boop*40D)%360)), 0, 1, 0); + + float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F; + GlStateManager.scale(scale, scale, scale); + try{ + AssetUtil.renderItemInWorld(stack); + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to render an item in an empowerer! The item is "+stack.getItem().getRegistryName()+"!", e); + } + + GlStateManager.popMatrix(); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 33906b881..1d7e0880d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -62,6 +62,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockLaserRelayItemWhitelist); this.add(InitBlocks.blockItemViewer); this.add(InitBlocks.blockAtomicReconstructor); + this.add(InitBlocks.blockEmpowerer); this.add(InitBlocks.blockPhantomface); this.add(InitBlocks.blockPhantomEnergyface); this.add(InitBlocks.blockPhantomLiquiface); @@ -217,7 +218,9 @@ public class CreativeTab extends CreativeTabs{ InitForeignPaxels.addToCreativeTab(); this.add(InitBlocks.blockCrystal); + this.add(InitBlocks.blockCrystalEmpowered); this.add(InitItems.itemCrystal); + this.add(InitItems.itemCrystalEmpowered); this.add(InitItems.itemJams); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 4ef742c7b..304eeb677 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -135,6 +135,7 @@ public final class InitItems{ public static Item itemLaserWrench; public static Item itemCrystal; + public static Item itemCrystalEmpowered; public static Item itemColorLens; public static Item itemExplosionLens; public static Item itemDamageLens; @@ -231,6 +232,7 @@ public final class InitItems{ itemDamageLens = new ItemLens("itemDamageLens", ActuallyAdditionsAPI.lensDeath); itemDisenchantingLens = new ItemLens("itemDisenchantingLens", ActuallyAdditionsAPI.lensDisenchanting); itemCrystal = new ItemCrystal("itemCrystal"); + itemCrystalEmpowered = new ItemCrystal("itemCrystalEmpowered"); itemLaserWrench = new ItemLaserWrench("itemLaserWrench"); itemChestToCrateUpgrade = new ItemChestToCrateUpgrade("itemChestToCrateUpgrade"); itemBooklet = new ItemBooklet("itemBooklet"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 253833668..daa5e503e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -34,7 +34,7 @@ public class LensColor extends Lens{ public static final int ENERGY_USE = 200; //Thanks to xdjackiexd for this, as I couldn't be bothered - private static final float[][] POSSIBLE_COLORS = { + public static final float[][] POSSIBLE_COLORS = { {158F, 43F, 39F}, //Red {234F, 126F, 53F}, //Orange {194F, 181F, 28F}, //Yellow diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java index 27c235633..315808b8f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java @@ -15,18 +15,20 @@ import net.minecraft.item.EnumRarity; public enum TheCrystals{ - REDSTONE("Red", Util.CRYSTAL_RED_RARITY), - LAPIS("Blue", Util.CRYSTAL_BLUE_RARITY), - DIAMOND("LightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY), - COAL("Black", Util.CRYSTAL_BLACK_RARITY), - EMERALD("Green", Util.CRYSTAL_GREEN_RARITY), - IRON("White", Util.CRYSTAL_WHITE_RARITY); + REDSTONE("Red", Util.CRYSTAL_RED_RARITY, 158F/255F, 43F/255F, 39F/255F), + LAPIS("Blue", Util.CRYSTAL_BLUE_RARITY, 37F/255F, 49F/255F, 147F/255F), + DIAMOND("LightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY, 99F/255F, 135F/255F, 210F/255F), + COAL("Black", Util.CRYSTAL_BLACK_RARITY, 0.2F, 0.2F, 0.2F), + EMERALD("Green", Util.CRYSTAL_GREEN_RARITY, 54F/255F, 75F/255F, 24F/255F), + IRON("White", Util.CRYSTAL_WHITE_RARITY, 0.8F, 0.8F, 0.8F); public final String name; public final EnumRarity rarity; + public final float[] conversionColorParticles; - TheCrystals(String name, EnumRarity rarity){ + TheCrystals(String name, EnumRarity rarity, float... conversionColorParticles){ this.name = name; this.rarity = rarity; + this.conversionColorParticles = conversionColorParticles; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index ed4176981..b57cdbc21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -24,6 +24,8 @@ import de.ellpeck.actuallyadditions.mod.jei.coffee.CoffeeMachineRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.coffee.CoffeeMachineRecipeHandler; import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeHandler; +import de.ellpeck.actuallyadditions.mod.jei.empowerer.EmpowererRecipeCategory; +import de.ellpeck.actuallyadditions.mod.jei.empowerer.EmpowererRecipeHandler; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeHandler; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -43,20 +45,23 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ new BookletRecipeCategory(helpers.getGuiHelper()), new CoffeeMachineRecipeCategory(helpers.getGuiHelper()), new CrusherRecipeCategory(helpers.getGuiHelper()), - new ReconstructorRecipeCategory(helpers.getGuiHelper()) + new ReconstructorRecipeCategory(helpers.getGuiHelper()), + new EmpowererRecipeCategory(helpers.getGuiHelper()) ); registry.addRecipeHandlers( new BookletRecipeHandler(), new CoffeeMachineRecipeHandler(), new CrusherRecipeHandler(), - new ReconstructorRecipeHandler() + new ReconstructorRecipeHandler(), + new EmpowererRecipeHandler() ); registry.addRecipes(ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA); registry.addRecipes(ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS); registry.addRecipes(ActuallyAdditionsAPI.CRUSHER_RECIPES); registry.addRecipes(ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES); + registry.addRecipes(ActuallyAdditionsAPI.EMPOWERER_RECIPES); registry.addRecipeClickArea(GuiCoffeeMachine.class, 53, 42, 22, 16, CoffeeMachineRecipeCategory.NAME); registry.addRecipeClickArea(GuiGrinder.class, 80, 40, 24, 22, CrusherRecipeCategory.NAME); @@ -81,6 +86,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockGrinderDouble), CrusherRecipeCategory.NAME); registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockCoffeeMachine), CoffeeMachineRecipeCategory.NAME); registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockAtomicReconstructor), ReconstructorRecipeCategory.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockEmpowerer), EmpowererRecipeCategory.NAME); registry.addRecipeCategoryCraftingItem(new ItemStack(InitItems.itemBooklet), BookletRecipeCategory.NAME); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index f75df6832..4b9c47fb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -69,12 +69,12 @@ public class CrusherRecipeCategory implements IRecipeCategory{ recipeLayout.getItemStacks().init(0, true, 19, 7); recipeLayout.getItemStacks().set(0, RecipeUtil.getCrusherRecipeInputs(wrapper.theRecipe)); - recipeLayout.getItemStacks().init(1, true, 7, 55); + recipeLayout.getItemStacks().init(1, false, 7, 55); recipeLayout.getItemStacks().set(1, RecipeUtil.getCrusherRecipeOutputOnes(wrapper.theRecipe)); List outputTwos = RecipeUtil.getCrusherRecipeOutputTwos(wrapper.theRecipe); if(outputTwos != null && !outputTwos.isEmpty()){ - recipeLayout.getItemStacks().init(2, true, 31, 55); + recipeLayout.getItemStacks().init(2, false, 31, 55); recipeLayout.getItemStacks().set(2, outputTwos); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeCategory.java new file mode 100644 index 000000000..0ea6a1e8d --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeCategory.java @@ -0,0 +1,84 @@ +/* + * This file ("ReconstructorRecipeCategory.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.empowerer; + +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; + +public class EmpowererRecipeCategory implements IRecipeCategory{ + + public static final String NAME = "actuallyadditions.empowerer"; + + private final IDrawable background; + + public EmpowererRecipeCategory(IGuiHelper helper){ + this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiNEIEmpowerer"), 0, 0, 135, 80); + } + + @Override + public String getUid(){ + return NAME; + } + + @Override + public String getTitle(){ + return StringUtil.localize("container.nei."+NAME+".name"); + } + + + @Override + public IDrawable getBackground(){ + return this.background; + } + + @Override + public void drawExtras(Minecraft minecraft){ + + } + + @Override + public void drawAnimations(Minecraft minecraft){ + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper){ + if(recipeWrapper instanceof EmpowererRecipeWrapper){ + EmpowererRecipeWrapper wrapper = (EmpowererRecipeWrapper)recipeWrapper; + + recipeLayout.getItemStacks().init(0, true, 31, 31); + recipeLayout.getItemStacks().set(0, wrapper.theRecipe.input); + + recipeLayout.getItemStacks().init(1, true, 1, 31); + recipeLayout.getItemStacks().set(1, wrapper.theRecipe.modifier1); + + recipeLayout.getItemStacks().init(2, true, 31, 1); + recipeLayout.getItemStacks().set(2, wrapper.theRecipe.modifier2); + + recipeLayout.getItemStacks().init(3, true, 61, 31); + recipeLayout.getItemStacks().set(3, wrapper.theRecipe.modifier3); + + recipeLayout.getItemStacks().init(4, true, 31, 61); + recipeLayout.getItemStacks().set(4, wrapper.theRecipe.modifier4); + + recipeLayout.getItemStacks().init(5, false, 112, 31); + recipeLayout.getItemStacks().set(5, wrapper.theRecipe.output); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeHandler.java new file mode 100644 index 000000000..698329256 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeHandler.java @@ -0,0 +1,43 @@ +/* + * This file ("ReconstructorRecipeHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.empowerer; + +import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; + +public class EmpowererRecipeHandler implements IRecipeHandler{ + + @Override + public Class getRecipeClass(){ + return EmpowererRecipe.class; + } + + @Override + public String getRecipeCategoryUid(){ + return EmpowererRecipeCategory.NAME; + } + + @Override + public String getRecipeCategoryUid(EmpowererRecipe recipe){ + return this.getRecipeCategoryUid(); + } + + @Override + public IRecipeWrapper getRecipeWrapper(EmpowererRecipe recipe){ + return new EmpowererRecipeWrapper(recipe); + } + + @Override + public boolean isRecipeValid(EmpowererRecipe recipe){ + return true; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java new file mode 100644 index 000000000..1f78a5888 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java @@ -0,0 +1,94 @@ +/* + * This file ("ReconstructorRecipeWrapper.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.jei.empowerer; + +import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; +import de.ellpeck.actuallyadditions.mod.jei.RecipeWrapperWithButton; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class EmpowererRecipeWrapper extends RecipeWrapperWithButton implements IRecipeWrapper{ + + public final EmpowererRecipe theRecipe; + + public EmpowererRecipeWrapper(EmpowererRecipe recipe){ + this.theRecipe = recipe; + } + + @Override + public List getInputs(){ + return Arrays.asList(this.theRecipe.input, this.theRecipe.modifier1, this.theRecipe.modifier2, this.theRecipe.modifier3, this.theRecipe.modifier4); + } + + @Override + public List getOutputs(){ + return Collections.singletonList(this.theRecipe.output); + } + + @Override + public List getFluidInputs(){ + return new ArrayList(); + } + + @Override + public List getFluidOutputs(){ + return new ArrayList(); + } + + @Override + public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ + this.updateButton(minecraft, mouseX, mouseY); + } + + @Override + public void drawAnimations(Minecraft minecraft, int recipeWidth, int recipeHeight){ + + } + + @Nullable + @Override + public List getTooltipStrings(int mouseX, int mouseY){ + return null; + } + + @Override + public boolean handleClick(Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ + return this.handleClick(minecraft, mouseX, mouseY); + } + + @Override + public int getButtonX(){ + return 2; + } + + @Override + public int getButtonY(){ + return 2; + } + + @Override + public BookletPage getPage(){ + return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockEmpowerer)); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index fb44f6067..e0671e56b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -69,7 +69,7 @@ public class ReconstructorRecipeCategory implements IRecipeCategory{ recipeLayout.getItemStacks().init(0, true, 4, 18); recipeLayout.getItemStacks().set(0, RecipeUtil.getConversionLensInputs(wrapper.theRecipe)); - recipeLayout.getItemStacks().init(1, true, 66, 18); + recipeLayout.getItemStacks().init(1, false, 66, 18); recipeLayout.getItemStacks().set(1, RecipeUtil.getConversionLensOutputs(wrapper.theRecipe)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java index 951a0a60f..4124171e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java @@ -21,7 +21,7 @@ public class ParticleColored extends ParticleRedstone{ public ParticleColored(World world, double x, double y, double z, float size, float r, float g, float b, float ageMulti){ super(world, x, y, z, size, r, g, b); //To work around Reddust particles resetting the color to red if it's 0 (which is really stupid to be honest) - this.particleRed = ((float)(Math.random()*0.20000000298023224D)+0.8F)*r*((float)Math.random()*0.4F+0.6F); + this.particleRed = ((float)(Math.random()*0.2)+0.8F)*r*((float)Math.random()*0.4F+0.6F); this.particleMaxAge = (int)((8.0D/(Math.random()*0.8D+0.2D))*ageMulti); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index ba69e4ea8..ea6cd9681 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -15,19 +15,13 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; -import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; -import de.ellpeck.actuallyadditions.mod.blocks.render.RenderDisplayStand; -import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; -import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; +import de.ellpeck.actuallyadditions.mod.blocks.render.*; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.ClientEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; -import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; +import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -164,6 +158,7 @@ public class ClientProxy implements IProxy{ ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDisplayStand.class, new RenderDisplayStand()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmpowerer.class, new RenderEmpowerer()); //VillagerRegistry.INSTANCE().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EmpowererHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EmpowererHandler.java new file mode 100644 index 000000000..eadef8c4b --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/EmpowererHandler.java @@ -0,0 +1,31 @@ +/* + * This file ("EmpowererHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.recipe; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import net.minecraft.item.ItemStack; + +public final class EmpowererHandler{ + + public static void init(){ + ItemStack m = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()); + for(int i = 0; i < TheCrystals.values().length; i++){ + float[] color = TheCrystals.values()[i].conversionColorParticles; + ActuallyAdditionsAPI.addEmpowererRecipe(new ItemStack(InitItems.itemCrystal, 1, i), new ItemStack(InitItems.itemCrystalEmpowered, 1, i), m, m, m, m, 50000, color); + ActuallyAdditionsAPI.addEmpowererRecipe(new ItemStack(InitBlocks.blockCrystal, 1, i), new ItemStack(InitBlocks.blockCrystalEmpowered, 1, i), m, m, m, m, 500000, color); + } + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 46069c2f7..1794ba3fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -44,7 +44,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple if(!ConfigBoolValues.LESS_SOUND.isEnabled()){ world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - AssetUtil.shootParticles(world, startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 2 : 8, 2F); + AssetUtil.shootParticles(world, startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 2 : 8, 2F, 1F); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index fc3001d1a..c8123baf9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -51,6 +51,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); + //TODO Remove legacy names at some point register(TileEntityCompost.class, "Compost"); register(TileEntityFeeder.class, "Feeder"); register(TileEntityGiantChest.class, "GiantChest"); @@ -104,6 +105,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ register(TileEntityBookletStand.class, "BookletStand"); register(TileEntityDisplayStand.class, "DisplayStand"); register(TileEntityShockSuppressor.class, "ShockSuppressor"); + register(TileEntityEmpowerer.class); } private static void register(Class tileClass, String legacyName){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java index 06f244ca4..2a74437e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -22,7 +22,7 @@ import net.minecraft.util.EnumFacing; public class TileEntityDisplayStand extends TileEntityInventoryBase implements IEnergyDisplay, IEnergyReceiver{ - private final EnergyStorage storage = new EnergyStorage(300000); + public final EnergyStorage storage = new EnergyStorage(800000); private int oldEnergy; public TileEntityDisplayStand(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java new file mode 100644 index 000000000..ff35f7217 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java @@ -0,0 +1,163 @@ +/* + * This file ("TileEntityEmpowerer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +import java.util.Arrays; +import java.util.List; + +public class TileEntityEmpowerer extends TileEntityInventoryBase{ + + private int processTime; + + public TileEntityEmpowerer(){ + super(1, "empowerer"); + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + EmpowererRecipe recipe = getRecipeForInput(this.slots[0]); + if(recipe != null){ + int processTimeGoal = 150; + TileEntityDisplayStand[] modifierStands = this.getFittingModifiers(recipe, processTimeGoal); + if(modifierStands != null){ //Meaning the display stands around match all the criteria + + this.processTime++; + boolean done = this.processTime >= processTimeGoal; + + for(TileEntityDisplayStand stand : modifierStands){ + if(done){ + stand.decrStackSize(0, 1); + ((WorldServer)this.worldObj).spawnParticle(EnumParticleTypes.END_ROD, false, this.pos.getX()+0.5, this.pos.getY()+1.1, this.pos.getZ()+0.5, 30, 0, 0, 0, 0.25D); + } + + stand.storage.extractEnergy(recipe.energyPerStand/processTimeGoal, false); + + if(this.processTime%5 == 0 && this.worldObj instanceof WorldServer){ + ((WorldServer)this.worldObj).spawnParticle(EnumParticleTypes.FIREWORKS_SPARK, false, this.pos.getX()+0.5, this.pos.getY()+1.1, this.pos.getZ()+0.5, 1, 0, 0, 0, 0.1D); + } + AssetUtil.shootParticles(this.worldObj, stand.getPos().getX(), stand.getPos().getY()+0.45F, stand.getPos().getZ(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), recipe.particleColor, 8, 0.5F, 1F); + } + + if(done){ + this.slots[0] = recipe.output.copy(); + this.markDirty(); + + this.processTime = 0; + } + } + } + else{ + this.processTime = 0; + } + } + } + + private TileEntityDisplayStand[] getFittingModifiers(EmpowererRecipe recipe, int powerDivider){ + TileEntityDisplayStand[] modifierStands = new TileEntityDisplayStand[4]; + List itemsStillNeeded = Arrays.asList(recipe.modifier1, recipe.modifier2, recipe.modifier3, recipe.modifier4); + + for(int i = 0; i < EnumFacing.HORIZONTALS.length; i++){ + EnumFacing facing = EnumFacing.HORIZONTALS[i]; + BlockPos offset = this.pos.offset(facing, 2); + TileEntity tile = this.worldObj.getTileEntity(offset); + + if(tile != null && tile instanceof TileEntityDisplayStand){ + TileEntityDisplayStand stand = (TileEntityDisplayStand)tile; + ItemStack standItem = stand.getStackInSlot(0); + if(stand.storage.getEnergyStored() >= recipe.energyPerStand/powerDivider && ItemUtil.contains(itemsStillNeeded, standItem, true)){ + modifierStands[i] = stand; + itemsStillNeeded.remove(standItem); + } + else{ + return null; + } + } + else{ + return null; + } + } + + return modifierStands; + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE){ + compound.setInteger("ProcessTime", this.processTime); + } + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE){ + this.processTime = compound.getInteger("ProcessTime"); + } + } + + public static EmpowererRecipe getRecipeForInput(ItemStack input){ + if(input != null){ + for(EmpowererRecipe recipe : ActuallyAdditionsAPI.EMPOWERER_RECIPES){ + if(recipe.input != null && recipe.input.isItemEqual(input)){ + return recipe; + } + } + } + return null; + } + + @Override + public boolean shouldSyncSlots(){ + return true; + } + + @Override + public void markDirty(){ + super.markDirty(); + this.sendUpdate(); + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return getRecipeForInput(stack) != null; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ + return this.isItemValidForSlot(index, stack); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ + return getRecipeForInput(stack) == null; + } + + @Override + public int getInventoryStackLimit(){ + return 1; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 50d33b142..483dd18d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -84,7 +84,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.storage.receiveEnergy(ENERGY_PRODUCED, false); if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ - AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F); + AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F, 1F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index b9f23f4cc..a4e202d4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -169,7 +169,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private void shootParticles(int endX, int endY, int endZ){ if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ - AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F); + AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F, 1F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 65a202270..4dbff622f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -163,7 +163,7 @@ public final class AssetUtil{ GlStateManager.popMatrix(); } - public static void shootParticles(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize){ + public static void shootParticles(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize, float ageMultiplier){ if(!world.isRemote){ NBTTagCompound data = new NBTTagCompound(); data.setDouble("StartX", startX); @@ -177,7 +177,7 @@ public final class AssetUtil{ data.setFloat("Color3", color[2]); data.setInteger("ParticleAmount", particleAmount); data.setFloat("ParticleSize", particleSize); - data.setFloat("AgeMultiplier", 1F); + data.setFloat("AgeMultiplier", ageMultiplier); PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.PARTICLE_HANDLER), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 96)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 5613ec52f..6e07d6151 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.GameRegistry; +import java.util.Arrays; import java.util.List; @@ -66,13 +67,17 @@ public final class ItemUtil{ return getPlaceAt(array, stack, checkWildcard) != -1; } + public static int getPlaceAt(ItemStack[] array, ItemStack stack, boolean checkWildcard){ + return getPlaceAt(Arrays.asList(array), stack, checkWildcard); + } + /** * Returns the place of stack in array, -1 if not present */ - public static int getPlaceAt(ItemStack[] array, ItemStack stack, boolean checkWildcard){ - if(array != null && array.length > 0){ - for(int i = 0; i < array.length; i++){ - if((stack == null && array[i] == null) || areItemsEqual(stack, array[i], checkWildcard)){ + public static int getPlaceAt(List list, ItemStack stack, boolean checkWildcard){ + if(list != null && list.size() > 0){ + for(int i = 0; i < list.size(); i++){ + if((stack == null && list.get(i) == null) || areItemsEqual(stack, list.get(i), checkWildcard)){ return i; } } @@ -88,7 +93,7 @@ public final class ItemUtil{ * Returns true if list contains stack or if both contain null */ public static boolean contains(List list, ItemStack stack, boolean checkWildcard){ - return !(list == null || list.isEmpty()) && getPlaceAt(list.toArray(new ItemStack[list.size()]), stack, checkWildcard) != -1; + return !(list == null || list.isEmpty()) && getPlaceAt(list, stack, checkWildcard) != -1; } public static void addEnchantment(ItemStack stack, Enchantment e, int level){ diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCrystalEmpowered.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCrystalEmpowered.json new file mode 100644 index 000000000..1b8c08c23 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCrystalEmpowered.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredRed" } }, + "1": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredBlue" } }, + "2": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredLightBlue" } }, + "3": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredBlack" } }, + "4": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredGreen" } }, + "5": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalEmpoweredWhite" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockEmpowerer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockEmpowerer.json new file mode 100644 index 000000000..43785f7a7 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockEmpowerer.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockEmpowerer", + "top": "#bottom", + "side": "actuallyadditions:blocks/blockEmpowererSide" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlack.json new file mode 100644 index 000000000..104eeb158 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlack.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredBlack" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlue.json new file mode 100644 index 000000000..4a3f16778 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredBlue.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredBlue" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredGreen.json new file mode 100644 index 000000000..4a05639f8 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredGreen.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredGreen" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredLightBlue.json new file mode 100644 index 000000000..c3845d01b --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredLightBlue.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredLightBlue" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredRed.json new file mode 100644 index 000000000..de85ac8b5 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredRed.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredRed" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredWhite.json new file mode 100644 index 000000000..3d0f61900 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalEmpoweredWhite.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemCrystalEmpoweredWhite" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlack.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlack.png new file mode 100644 index 0000000000000000000000000000000000000000..5510647473d64a8bf1c4ceace8837ee6d50f9b46 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G^rh1>#+YnAtw0tMMiJbhi+?{hN?TWK0EIye(3BvIlTQ4*Y=R#Ki=l*&+$n3-3i zmzP?iV4`QBXPIMM=Lb}iVf*Ai`T5$62NldZXB<4}_iF#-W}Zli9EOeq zYMwl8(hoB9eZ|-+rE?lKFV?x?k|HIke7mcMeWAF=(FE}TRjG}Z{SrLim`{{R30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlue.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..d26182a338ae8c6cfeb8f3146b58d35845e7df1c GIT binary patch literal 820 zcmV-41Izr0P) zrZG*;(X!04v5gknX`^U``bWYb2$DWjI7RB9joY*s6yc}LGHv!5*C6^5M9sJr6f>va zowvxS4~P4{_r2#l=Q+=PZO!)gx(u%5eNc=2qgo3;sl%C6XUVL*&RN}c%*o?ikgsA+ zepgbDYUlN&enC&&U)9EUTYJqH4Ih$THc78{O2O??Xqyz?$_n0su^qgd{Vh_!ExoA+ z>tzY}s*{>NrN0p03^*8fXB0y$0;24N>JY1zUag{_Lu$`Opu0Ntk3ftHv5miks2asZ zkcxpS9Ia-pK&V{u=BF%y1c$OjNRhP=)>$y`F`UHsZUhW@tP=YO7~D54bXOrjfALMy zFq;M;Y=&weAr{^Ma1_P95e=~yT7wJDbUAU*TmD(&2t*swS(3r1vFZ9F5}|t3l~J4) zA|QYZlS4-l0{!JlP3+|WNgKj%7fUf>Y?o#fEaMElkCsY9gy=0W4k}X`-!Dxbumq-$ z|6gP&UKC5u^V9O=C1vZW#lcZ&>Vzd=gc96|#4d8dRThlV1f6K)nNXwT6(AEYm(AvH zV2tOane*T*4o+Gwrj8(X7#x%)_CelliJCQt$S{H4GA;NUlX`baSHz8cS4cgC*i|T9T|OsUpDUFOCPpwJ zZe9?Cc@8!Z6#HXb=MnY>n7a?sz1)mE%hI}?lTmYy$)IdeeJdB#3wlcUZ9$iFUS7vH ywG}R^t@x`to!@l_vZp|51vm4h8+PfsUHS=zIr|TgFd?x30000uMOW?|22x0@$mg#hrXw`ORj%UV@ zVD#dd^*iT1-}}x8wcB@5yL|_>JNIDNdyM*n=P-${VU`wQk``dh&Y&sx5|-==I;C~k z^KaoOZopmI@;kz?xVSqfI&BqV*ePplpH)f`_vo)3QcI> zV47~GurY;|bda-|1-bO<}JhF=BMMInjz4)KWNzBz1?%y2|?qjxeH@FrXGNz;^?j zke^NNRTHQepFwal!EG+oxWy_rd7dKId996hloN`w>M)Z9nb0Zk!uIO}EI&73NI!z$ zlGb#=1S?FinUfSvQhbe!v0{|tjj(Zj*hi205iRBSFnx=|SYE+t@gal@{6WH8JR}z| z#8HJAJwlT((W(wo9F&u=RkzS8Z^B%8ho;IZjB*S$nFkO$nZVD59*)t)`MUYVc^K8p zCTTy8mp_e*Gq+IOD92G(o=5HXS=5xLaVmWuLQCNd&KK6n8k!3+nDfhI2~DL%G!*7w wEY87vw1h_G6&f&0W>BxZz?te()K#9~H#%q{l+|oFCIA2c07*qoM6N<$g0}{K!2kdN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredLightBlue.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredLightBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..42ebe430059eae031540a5ab956b9bdc3522f73c GIT binary patch literal 834 zcmV-I1HJr-P)RA~uQSu!OxAGWN$+q}^qtJypc} zL^$Hk95PF{I11h3IH(~PszV6r5Q91dA{(sZoV5@#SR2R&be#F>IGwGx1h!pyRHDtl zAkFKLNiL9FprA+;NEZAC&Zq0hxNFFa*AVZfK+;wCS0G?epg|ZE(2=J=&Zm>y#uVYv zvDMQSkQdB*qByHV@;6Yh5NJRO@k#rZz}Xb7Pipu0z?>XAE(yvK56&CNywYrBy|g<+ z(rnANI7b(L=0XvHz2|1?Jfqn`JCaTj$|4U0G@E3>QqOvMxGf@DA|%NCCVCkvogBM0 zBzp6fKmo-S+FWQ6{MF_0CW>tcoRiG7hDi509D5TIDskRFQH|fB`mQBp z!Ma*?oh~8-+Z1`7M_$@@-{8yW6~a$W;P^BlxBeVu8_`Cae22=W<-~;Y#(=b9;B3B* zAD$ZaT^HCHs$hGd!reKggK-%p2B^H&ZCLNBWt*`6nh#t1py9jw7t*6Q_&jorl=BL^ zLswXQM1d4HtQCxooS#F&p%JW*Slf%k`oyOpJ$6IVHOIG%ShtF3mx^F#h7N{R>^h4! zl0ynU4$2%+8SncQ#Cs(qp0gfQk?6nRnqP7QFA?pjV*Obet6eI717jmjWJG}Z%K!iX M07*qoM6N<$f-ePc-2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredRed.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredRed.png new file mode 100644 index 0000000000000000000000000000000000000000..715785c878a74347b3ad513676f2842e89606574 GIT binary patch literal 789 zcmV+w1M2*VP)R|1;3R;7Cn+VlqL-CERM z21Hj%GpFV&y-v!kXXN8F00*GWoi>0i(nN#wwnq8BO8IiJ75@U9)l!OG43uKm6p%zK zyEg$?%D9+$gK`4_1K=RN(JQnfhq=SC912_rE(~G-E1q0}eE=vQ;|Tc}meN>Eb&vrs zOinXrUXE~=#7%MyYwcyQt?@3=tXvep=Rv4x0!jmLi_m-4_}~x3b;I1@2uU=J3v$T! z)(~Qx9W#3YSke^ycJa3+D3}TZMM(m*=Qly+`l`twz6`*ADSN;Jd^quc$UFt5=YHiP z3*?&{^d#4L>rA3#=#IN&z|QNE-;?+Zo^>NBZvme z9xNYm2QnyQf|~JG_fZxnE$~I)NC`lyYBS< zj~DFvgyIp3hiZUSt9Zj&d6?kbZnHiBmOx1hi8i($XOhq+n2$9|gA1kpO6gvObhko< z>lN~qMjBNds#htFVqq1dXdt8?{dM}*6V&&fTK#0M`_)neK!ov5K)U6Zy8QYDkX-r> ThY@$500000NkvXXu0mjftQ%U1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredWhite.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCrystalEmpoweredWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b020a06abfa216a0c25afb87e4a050e5b9923f GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5<>&kwgn_1XO(|FOrnLr_l64!{5;QX|b^2DN4hJwV*yb`^< z)Di^~Jp(<<9OF7apqfXXE{-7<{%a@S~dIoxyImUH<3=FKR zJY5_^D&pSW3e3BGL(Jvk8Lj3sdyLlR-Dk++aJkEF*EQ{Nu=jyqH^ol){aUi`&*Sg! z@BerB^zrAxoOmk+`}%)1H`mASf3&&s?#GB3&rh=_{AI2?`fEx0=Ut@=XVMsMM6n;r zVQW}RD-O^N{q+ad*IfcS;JCURZ*k2_h7aY|a@?OK7`F8tKV$>6`|(DDe#V5?6*^~< z8E#nNkotU$F=GGE?>DdMi!UwrpZM=gdG#Mzx&GG5dv*-{@elv%yqDdEb=b&Pj%tDfcGt`@ZV2HALys?@Qj_efU!rV$P-NOW)sp_`}D1U@p%A*O#_0 ztJhoYI}EpS>b(6+-b*pOOJUHn`aEy*rO%hYi$Rp8-z&cM@#afweuR6TKVLTA-WY6U z$urw@+j%qV%2ME-i8}9XYshft<#`61f6Mp(sz>UCO+n zZuQ&H*W$^bWCBU24?ezL9uABtv-Q!mO`(v)|7|Jrhac>JUa8y8zFu4N=%T^#>3j_J z+kr{bzsI3nqLI&#Nj8ba>Ig?khu{kVQK$!8;-MT+OLG}_)Usv|~+~dIoxyImUHG^Xq zD(8qq>$d49G?cg4xRxBKE_z)1{4c|#>5a0L+8ZX_ZBRel&?j?J#9*Rw8y`wt9NWuA$vKW{JxI*h^7)z4*}Q$iB}RH11} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredBlue.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..198850fac8d97e00fc155235e3a3813aa7812392 GIT binary patch literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~+ zSBf}Z=w5UwT!ZzfyiSOI*WL|6T$;}&9yi`SdyC=9NM`w&bI(|AwvJqM+f}^A;d6C% zQNQ4&--VOilKMs0TUh)*^n2IcCEHdkKI)Y^$Hnqddcn(_1g^}J`}RL8-1Ydfu*~Cl zwkd@+=OTN#ave%SyR3PA1al+i8E6UEH)OGW{pEJ3t37?E*@r6s2>YgKZ@GJ0%zj*W zR2RQ&Ka2R%9hVP?TzuWwxMum=q=(^5N44cxqUDZ8AKCO(az~-jhP&5g+NArY_|);K zExmD&;c)PaIm_;MEZr?3GqbJ}XwTk4A#od?;%_z*U!HuwYbkYsoBf}9UR;{>{pMG1 i_}J=$#Y1&ouz#CvoXGcXhaE5=89ZJ6T-G@yGywqjq^xKF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredGreen.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..536f5db6e3abe6c24100cb98d58bf5223ed29572 GIT binary patch literal 574 zcmV-E0>S->P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra3l0)G zCQ!9*;s5{u7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_oJmAMR5(wi zlF2SaK@^7T-l{v*a0iWN(ujBnk>JMAZ$qqzu;39aL}SqrnkI-gB{p8-ckYnx=Jvv{ z_$pN=_5Ww6Vr;hYKZXW>L%G2p$qn*Dm>QUdLb#$4tr_TLjU)}B(*U*A1TpQ+oIjj-uJwm8(i0KZ~jM10H<9XT*(E<}fccU@Rr2VRT8pYr+!qf0SN(}Q=% zAl?~NmxOH}(VoQUK?tX1Bf4?Go*A558|qp>)q}o4MocF5jSca_;9k4nZ3eUHqqalk zo>TT`s^UQ)=-3D*OL1w?Gm#4tg53R%z}U_R#x`gM>ok)sLoIOxmp0_YfOy~)a+7%8 zK%OyprxwOHM-c5w)b?qB+dh&L0okO|XL<&OuD2;&<)VZ-^1&{s-?jsBYr(#7;2%=y zb&8kwN=@Y>6(*?y?|6_;9Q=*v!_#$D6=!@o6hNA8_$S>>ccTV;)SH&4ag9U@a;o^*;!5`CLpA=VCNv;YrQvd(} M07*qoM6N<$f;%?yvj6}9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredLightBlue.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredLightBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..34a0ffdde12fbb882a760fc86e65d45a3dfbfb9d GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~+rIsj|=o#o)<`~!c0o5$@ba4!^@L$^J$kl8h;9BgoF}yHzsriL( z43Aikv{tm2=~l4kKd?&`a!)f#zP#YWftpWphHCoj7WQebNalJq!^z-={R2MB9o*lu z>{#Ew`5yUT!hQMd<0mhd&HJ^}a?@=kWs3kwJEqYx6pko<4 MUHx3vIVCg!0D&rTTL1t6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredRed.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredRed.png new file mode 100644 index 0000000000000000000000000000000000000000..b2deaaeb76d2f9981b027220612ed2c8f75d92ca GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~+rIsj|=o#o)<`~!c0oDBRba4!^@LxK~Fx$ycr1kUlJ6wFbEG%|& z>iuJ2Pe17RLZL)hW)8P33%mJ2-vR+E5iVISzNQN=f6hH!JL!cmbM1$T-bLq5)_OW+ zeEaYI^oi|J=1ojKHoOZZ4l&$%@Y$c)$Kp^y5!Z_pwwSZ?jXq`0aa2}5z_Ol$Kkr{^ zO*?*LckJ$6?4uklh=EeZSTGP+BX(pI52p+`njxgN@xNA Dr6-qB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredWhite.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCrystalEmpoweredWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..f49a69f4aece6939b59c8bd1920694fab8e20ae4 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~-24K1`g{Iwk^l-xl(rIsj|=o#o)<`~!c0o7dcba4!^@Si)0o2%JCz{NJ{{G+=?g8dhq zG6OHxEfk%Tws`Wh%@Z%Ra_-ptc~e*D*45iv9A?G8JnO1=!{qFL22SZ@jth!e#k?E~ z?kcxD*$iZP|7BVrxsu_8YCF&Jq^;};^Cte3^O|HLuUsJC@NmnEOH6++e#?os`L?+C zjiBR_W#%9DFfNvT_l8YK=)jj#aq7Q11drrizO8%iz}DimHZe>d5l0?<7IWbBR=DHQ zx?{1xvj=QXe#@T_*k4f8{k_uj$z>guzilFpb!H~ahBLHguKvjApQP7(aYpq#pzjzw MUHx3vIVCg!05)2VG5`Po literal 0 HcmV?d00001