From b5777f715b08e0972cae84793334e83c8cf969dc Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 25 Feb 2020 22:57:10 +0100 Subject: [PATCH] made the nether altar work --- .../java/de/ellpeck/naturesaura/Helper.java | 2 +- .../naturesaura/api/NaturesAuraAPI.java | 2 +- .../naturesaura/api/recipes/AltarRecipe.java | 5 +- .../naturesaura/blocks/BlockNatureAltar.java | 1 + .../blocks/tiles/TileEntityNatureAltar.java | 53 +++++++++++++----- .../naturesaura/compat/jei/AltarCategory.java | 11 +++- .../compat/patchouli/ProcessorAltar.java | 8 +++ .../naturesaura/packet/PacketParticles.java | 3 +- .../naturesaura/recipes/ModRecipes.java | 30 +++++----- .../naturesaura/textures/gui/jei/altar.png | Bin 2040 -> 743 bytes .../textures/gui/patchouli/elements.png | Bin 4623 -> 4102 bytes .../book/en_us/templates/altar.json | 20 ++++--- .../book/en_us/templates/offering.json | 2 +- .../recipes/gold_nether_brick.json | 14 +++++ 14 files changed, 107 insertions(+), 44 deletions(-) create mode 100644 src/main/resources/data/naturesaura/recipes/gold_nether_brick.json diff --git a/src/main/java/de/ellpeck/naturesaura/Helper.java b/src/main/java/de/ellpeck/naturesaura/Helper.java index 69b53387..1476613c 100644 --- a/src/main/java/de/ellpeck/naturesaura/Helper.java +++ b/src/main/java/de/ellpeck/naturesaura/Helper.java @@ -173,7 +173,7 @@ public final class Helper { } } } - return ActionResultType.FAIL; + return ActionResultType.CONSUME; } public static ICapabilityProvider makeRechargeProvider(ItemStack stack, boolean needsSelected) { diff --git a/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java b/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java index 95c577ea..0a00817d 100644 --- a/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java +++ b/src/main/java/de/ellpeck/naturesaura/api/NaturesAuraAPI.java @@ -81,7 +81,7 @@ public final class NaturesAuraAPI { * easily registered using {@link BasicAuraType#register()}. */ public static final Map AURA_TYPES = new HashMap<>(); - public static final BasicAuraType TYPE_OVERWORLD = new BasicAuraType(new ResourceLocation(MOD_ID, "overworld"), DimensionType.OVERWORLD, 0xbef224, 0).register(); + public static final BasicAuraType TYPE_OVERWORLD = new BasicAuraType(new ResourceLocation(MOD_ID, "overworld"), DimensionType.OVERWORLD, 0x89cc37, 0).register(); public static final BasicAuraType TYPE_NETHER = new BasicAuraType(new ResourceLocation(MOD_ID, "nether"), DimensionType.THE_NETHER, 0x871c0c, 0).register(); public static final BasicAuraType TYPE_END = new BasicAuraType(new ResourceLocation(MOD_ID, "end"), DimensionType.THE_END, 0x302624, 0).register(); public static final BasicAuraType TYPE_OTHER = new BasicAuraType(new ResourceLocation(MOD_ID, "other"), null, 0x2fa8a0, Integer.MIN_VALUE).register(); diff --git a/src/main/java/de/ellpeck/naturesaura/api/recipes/AltarRecipe.java b/src/main/java/de/ellpeck/naturesaura/api/recipes/AltarRecipe.java index a04862ad..8eeafd6a 100644 --- a/src/main/java/de/ellpeck/naturesaura/api/recipes/AltarRecipe.java +++ b/src/main/java/de/ellpeck/naturesaura/api/recipes/AltarRecipe.java @@ -1,6 +1,7 @@ package de.ellpeck.naturesaura.api.recipes; import de.ellpeck.naturesaura.api.NaturesAuraAPI; +import de.ellpeck.naturesaura.api.aura.type.IAuraType; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; @@ -10,14 +11,16 @@ public class AltarRecipe { public final ResourceLocation name; public final Ingredient input; public final ItemStack output; + public final IAuraType requiredType; public final Ingredient catalyst; public final int aura; public final int time; - public AltarRecipe(ResourceLocation name, Ingredient input, ItemStack output, Ingredient catalyst, int aura, int time) { + public AltarRecipe(ResourceLocation name, Ingredient input, ItemStack output, IAuraType requiredType, Ingredient catalyst, int aura, int time) { this.name = name; this.input = input; this.output = output; + this.requiredType = requiredType; this.catalyst = catalyst; this.aura = aura; this.time = time; diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java index a36d258c..fe1c2ef4 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java @@ -42,6 +42,7 @@ public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvide public BlockNatureAltar() { super("nature_altar", TileEntityNatureAltar::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(4F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); + this.setDefaultState(this.getDefaultState().with(NETHER, false)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityNatureAltar.java index df4318c3..57b48c20 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityNatureAltar.java @@ -30,7 +30,12 @@ import java.util.Random; public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTileEntity { - private final BasicAuraContainer container = new BasicAuraContainer(NaturesAuraAPI.TYPE_OVERWORLD, 500000); + private final BasicAuraContainer container = new BasicAuraContainer(null, 500000) { + @Override + public int getAuraColor() { + return IAuraType.forWorld(TileEntityNatureAltar.this.world).getColor(); + } + }; private final ItemStack[] catalysts = new ItemStack[4]; public final ItemStackHandler items = new ItemStackHandlerNA(1, this, true) { @Override @@ -54,12 +59,13 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi }; @OnlyIn(Dist.CLIENT) public int bobTimer; - public boolean structureFine; + public StructureState structureState = StructureState.INVALID; private AltarRecipe currentRecipe; private int timer; private int lastAura; + private boolean firstTick = true; public TileEntityNatureAltar() { super(ModTileEntities.NATURE_ALTAR); @@ -82,17 +88,19 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi } if (!this.world.isRemote) { - if (this.world.getGameTime() % 40 == 0) { - boolean fine = Multiblocks.ALTAR.isComplete(this.world, this.pos); - if (fine != this.structureFine) { - this.structureFine = fine; + if (this.world.getGameTime() % 40 == 0 || this.firstTick) { + StructureState newState = this.getNewState(); + if (newState != this.structureState) { + this.structureState = newState; this.sendToClients(); } + this.firstTick = false; } - if (this.structureFine) { + if (this.structureState != StructureState.INVALID) { int space = this.container.storeAura(300, true); - if (space > 0 && this.container.isAcceptableType(IAuraType.forWorld(this.world))) { + IAuraType expectedType = this.structureState == StructureState.NETHER ? NaturesAuraAPI.TYPE_NETHER : NaturesAuraAPI.TYPE_OVERWORLD; + if (space > 0 && expectedType.isPresentInWorld(this.world)) { int toStore = Math.min(IAuraChunk.getAuraInArea(this.world, this.pos, 20), space); if (toStore > 0) { BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 20, this.pos); @@ -107,7 +115,7 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi this.pos.getY() + rand.nextFloat() * 10F, this.pos.getZ() + (float) rand.nextGaussian() * 10F, this.pos.getX() + 0.5F, this.pos.getY() + 0.5F, this.pos.getZ() + 0.5F, - rand.nextFloat() * 0.1F + 0.1F, 0x89cc37, rand.nextFloat() * 1F + 1F + rand.nextFloat() * 0.1F + 0.1F, this.container.getAuraColor(), rand.nextFloat() * 1F + 1F )); } } @@ -122,7 +130,7 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi this.container.drainAura(stored, false); if (this.world.getGameTime() % 4 == 0) - PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.ALTAR_CONVERSION)); + PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.ALTAR_CONVERSION, this.container.getAuraColor())); } } } else { @@ -140,7 +148,7 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi this.container.drainAura(req, false); if (this.timer % 4 == 0) - PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.ALTAR_CONVERSION)); + PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), PacketParticles.Type.ALTAR_CONVERSION, this.container.getAuraColor())); this.timer++; if (this.timer >= this.currentRecipe.time) { @@ -162,7 +170,7 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi this.sendToClients(); } } else { - if (this.structureFine) { + if (this.structureState != StructureState.INVALID) { if (rand.nextFloat() >= 0.7F) { int fourths = this.container.getMaxAura() / 4; if (this.container.getStoredAura() > 0) { @@ -195,7 +203,7 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi private AltarRecipe getRecipeForInput(ItemStack input) { for (AltarRecipe recipe : NaturesAuraAPI.ALTAR_RECIPES.values()) { - if (recipe.input.test(input)) { + if (recipe.input.test(input) && (recipe.requiredType == null || recipe.requiredType.isPresentInWorld(this.world))) { if (recipe.catalyst == Ingredient.EMPTY) return recipe; for (ItemStack stack : this.catalysts) @@ -206,12 +214,20 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi return null; } + private StructureState getNewState() { + if (Multiblocks.ALTAR.isComplete(this.world, this.pos)) + return StructureState.OVERWORLD; + if (Multiblocks.NETHER_ALTAR.isComplete(this.world, this.pos)) + return StructureState.NETHER; + return StructureState.INVALID; + } + @Override public void writeNBT(CompoundNBT compound, SaveType type) { super.writeNBT(compound, type); if (type != SaveType.BLOCK) { compound.put("items", this.items.serializeNBT()); - compound.putBoolean("fine", this.structureFine); + compound.putString("state", this.structureState.name()); this.container.writeNBT(compound); } if (type == SaveType.TILE) { @@ -227,7 +243,8 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi super.readNBT(compound, type); if (type != SaveType.BLOCK) { this.items.deserializeNBT(compound.getCompound("items")); - this.structureFine = compound.getBoolean("fine"); + if (compound.contains("state")) + this.structureState = StructureState.valueOf(compound.getString("state")); this.container.readNBT(compound); } if (type == SaveType.TILE) { @@ -247,4 +264,10 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi public IItemHandlerModifiable getItemHandler(Direction facing) { return this.items; } + + public enum StructureState { + INVALID, + NETHER, + OVERWORLD + } } diff --git a/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java b/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java index b3ea17c6..a19c6d97 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/jei/AltarCategory.java @@ -4,6 +4,8 @@ import com.google.common.collect.ImmutableList; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.recipes.AltarRecipe; import de.ellpeck.naturesaura.blocks.ModBlocks; +import de.ellpeck.naturesaura.items.ItemAuraBottle; +import de.ellpeck.naturesaura.items.ModItems; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.gui.drawable.IDrawable; @@ -25,7 +27,7 @@ public class AltarCategory implements IRecipeCategory { private final ItemStack altar = new ItemStack(ModBlocks.NATURE_ALTAR); public AltarCategory(IGuiHelper helper) { - this.background = helper.createDrawable(new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/jei/altar.png"), 0, 0, 78, 57); + this.background = helper.createDrawable(new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/jei/altar.png"), 0, 0, 103, 57); } @Override @@ -59,6 +61,8 @@ public class AltarCategory implements IRecipeCategory { builder.add(altarRecipe.input.getMatchingStacks()); if (altarRecipe.catalyst != Ingredient.EMPTY) builder.add(altarRecipe.catalyst.getMatchingStacks()); + if (altarRecipe.requiredType != null) + builder.add(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), altarRecipe.requiredType)); iIngredients.setInputs(VanillaTypes.ITEM, builder.build()); iIngredients.setOutput(VanillaTypes.ITEM, altarRecipe.output); } @@ -68,10 +72,13 @@ public class AltarCategory implements IRecipeCategory { IGuiItemStackGroup group = iRecipeLayout.getItemStacks(); group.init(0, true, 0, 18); group.set(0, Arrays.asList(recipe.input.getMatchingStacks())); - group.init(1, false, 56, 18); + group.init(1, false, 80, 18); group.set(1, recipe.output); group.init(2, true, 26, 18); group.set(2, recipe.catalyst == Ingredient.EMPTY ? Collections.singletonList(this.altar) : Arrays.asList(recipe.catalyst.getMatchingStacks())); + group.init(3, true, 51, 18); + if (recipe.requiredType != null) + group.set(3, ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), recipe.requiredType)); } } diff --git a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java index 0e29877a..7e3eb515 100644 --- a/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/compat/patchouli/ProcessorAltar.java @@ -2,6 +2,9 @@ package de.ellpeck.naturesaura.compat.patchouli; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.AltarRecipe; +import de.ellpeck.naturesaura.items.ItemAuraBottle; +import de.ellpeck.naturesaura.items.ModItems; +import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IVariableProvider; @@ -30,6 +33,11 @@ public class ProcessorAltar implements IComponentProcessor { return PatchouliAPI.instance.serializeIngredient(this.recipe.catalyst); else return null; + case "type": + if (this.recipe.requiredType != null) + return PatchouliAPI.instance.serializeItemStack(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), this.recipe.requiredType)); + else + return null; case "name": return this.recipe.output.getDisplayName().getFormattedText(); default: diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java index 2fe29930..75d80105 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketParticles.java @@ -120,13 +120,14 @@ public class PacketParticles { } }), ALTAR_CONVERSION((message, world) -> { + int color = message.data[0]; for (int i = world.rand.nextInt(5) + 2; i >= 0; i--) { NaturesAuraAPI.instance().spawnMagicParticle( message.posX + 0.25F + world.rand.nextFloat() * 0.5F, message.posY + 0.9F + 0.25F * world.rand.nextFloat(), message.posZ + 0.25F + world.rand.nextFloat() * 0.5F, world.rand.nextGaussian() * 0.02F, world.rand.nextFloat() * 0.02F, world.rand.nextGaussian() * 0.02F, - 0x00FF00, world.rand.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true); + color, world.rand.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true); } }), POTION_GEN((message, world) -> { diff --git a/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java b/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java index 4c546a74..b585e893 100644 --- a/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java +++ b/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java @@ -157,29 +157,29 @@ public final class ModRecipes { new AltarRecipe(res("infused_iron"), ing(Items.IRON_INGOT), new ItemStack(ModItems.INFUSED_IRON), - Ingredient.EMPTY, 15000, 80).register(); + NaturesAuraAPI.TYPE_OVERWORLD, Ingredient.EMPTY, 15000, 80).register(); new AltarRecipe(res("infused_iron_block"), ing(Blocks.IRON_BLOCK), new ItemStack(ModBlocks.INFUSED_IRON_BLOCK), - Ingredient.EMPTY, 135000, 700).register(); + NaturesAuraAPI.TYPE_OVERWORLD, Ingredient.EMPTY, 135000, 700).register(); new AltarRecipe(res("infused_stone"), ing(Blocks.STONE), new ItemStack(ModBlocks.INFUSED_STONE), - Ingredient.EMPTY, 7500, 40).register(); + NaturesAuraAPI.TYPE_OVERWORLD, Ingredient.EMPTY, 7500, 40).register(); Ingredient conversion = ing(ModBlocks.CONVERSION_CATALYST); - new AltarRecipe(res("breath"), nbtIng(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), NaturesAuraAPI.TYPE_END)), new ItemStack(Items.DRAGON_BREATH), conversion, 20000, 80).register(); - new AltarRecipe(res("leather"), ing(Items.ROTTEN_FLESH), new ItemStack(Items.LEATHER), conversion, 10000, 50).register(); - new AltarRecipe(res("soul_sand"), ing(Blocks.SAND), new ItemStack(Blocks.SOUL_SAND), conversion, 5000, 100).register(); - new AltarRecipe(res("nether_wart"), ing(Blocks.RED_MUSHROOM), new ItemStack(Items.NETHER_WART), conversion, 30000, 250).register(); - new AltarRecipe(res("prismarine"), ing(Items.QUARTZ), new ItemStack(Items.PRISMARINE_SHARD), conversion, 55000, 200).register(); - new AltarRecipe(res("water"), ing(Items.GLASS_BOTTLE), PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER), conversion, 25000, 200).register(); - new AltarRecipe(res("coal"), ing(Items.CHARCOAL), new ItemStack(Items.COAL), conversion, 30000, 250).register(); + new AltarRecipe(res("breath"), nbtIng(ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), NaturesAuraAPI.TYPE_END)), new ItemStack(Items.DRAGON_BREATH), NaturesAuraAPI.TYPE_NETHER, conversion, 20000, 80).register(); + new AltarRecipe(res("leather"), ing(Items.ROTTEN_FLESH), new ItemStack(Items.LEATHER), NaturesAuraAPI.TYPE_OVERWORLD, conversion, 10000, 50).register(); + new AltarRecipe(res("soul_sand"), ing(Blocks.SAND), new ItemStack(Blocks.SOUL_SAND), NaturesAuraAPI.TYPE_NETHER, conversion, 5000, 100).register(); + new AltarRecipe(res("nether_wart"), ing(Blocks.RED_MUSHROOM), new ItemStack(Items.NETHER_WART), NaturesAuraAPI.TYPE_NETHER, conversion, 30000, 250).register(); + new AltarRecipe(res("prismarine"), ing(Items.QUARTZ), new ItemStack(Items.PRISMARINE_SHARD), NaturesAuraAPI.TYPE_NETHER, conversion, 55000, 200).register(); + new AltarRecipe(res("water"), ing(Items.GLASS_BOTTLE), PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER), NaturesAuraAPI.TYPE_OVERWORLD, conversion, 25000, 200).register(); + new AltarRecipe(res("coal"), ing(Items.CHARCOAL), new ItemStack(Items.COAL), NaturesAuraAPI.TYPE_OVERWORLD, conversion, 30000, 250).register(); Ingredient crushing = ing(ModBlocks.CRUSHING_CATALYST); - new AltarRecipe(res("bone"), ing(Items.BONE), new ItemStack(Items.BONE_MEAL, 6), crushing, 3000, 40).register(); - new AltarRecipe(res("sugar"), ing(Items.SUGAR_CANE), new ItemStack(Items.SUGAR, 3), crushing, 3000, 40).register(); - new AltarRecipe(res("blaze"), ing(Items.BLAZE_ROD), new ItemStack(Items.BLAZE_POWDER, 4), crushing, 5000, 60).register(); - new AltarRecipe(res("glowstone"), ing(Blocks.GLOWSTONE), new ItemStack(Items.GLOWSTONE_DUST, 4), crushing, 3000, 40).register(); - new AltarRecipe(res("sand"), ing(Blocks.COBBLESTONE), new ItemStack(Blocks.SAND), crushing, 3000, 40).register(); + new AltarRecipe(res("bone"), ing(Items.BONE), new ItemStack(Items.BONE_MEAL, 6), NaturesAuraAPI.TYPE_OVERWORLD, crushing, 3000, 40).register(); + new AltarRecipe(res("sugar"), ing(Items.SUGAR_CANE), new ItemStack(Items.SUGAR, 3), NaturesAuraAPI.TYPE_OVERWORLD, crushing, 3000, 40).register(); + new AltarRecipe(res("blaze"), ing(Items.BLAZE_ROD), new ItemStack(Items.BLAZE_POWDER, 4), NaturesAuraAPI.TYPE_NETHER, crushing, 5000, 60).register(); + new AltarRecipe(res("glowstone"), ing(Blocks.GLOWSTONE), new ItemStack(Items.GLOWSTONE_DUST, 4), NaturesAuraAPI.TYPE_NETHER, crushing, 3000, 40).register(); + new AltarRecipe(res("sand"), ing(Blocks.COBBLESTONE), new ItemStack(Blocks.SAND), NaturesAuraAPI.TYPE_OVERWORLD, crushing, 3000, 40).register(); new OfferingRecipe(res("sky_ingot"), amountIng(new ItemStack(ModItems.INFUSED_IRON, 3)), diff --git a/src/main/resources/assets/naturesaura/textures/gui/jei/altar.png b/src/main/resources/assets/naturesaura/textures/gui/jei/altar.png index 5c51c8dcec557548dda997957c3a873ba6cc59a4..80036e30acaf3cb79ed142c7035951f2a2756efa 100644 GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&2?&#~tz_78e=6B#^1_q{i zo-U3d6?5L+b?kd&Ai#RzRiK~ix{2KiGnLu;u5O+cnC+H1siZ0Q)m~8{kB`s(Pw{1u z|Ni^0amKl)ML$>UWxIEO{Vi^WSCadxi|0KLUz@zWP$pZSaaSr+!x0e%m2Ypw9;}|` z_Ev72+687|29<49Oe+%4&aHcCtm~_DVbwDAhP{enbrH*7GIiXLOMBS~dWL$2$y#%~85r2h zJY5_^D&pQ=Pwcz1LaOcJ8?Ej$`!=n;BfZjV(+u-g-)89#l}kP^KbE)Ve1dP?pMQUU z^I!kFU*6`r+0wJVu{#wjrsaCg{{8m)`uOeM=M5JZIe*Z(J;m&MwAF&eOP|jOgelOK zy>RhT@tGBO1Z++Nb^a~8esE9r+QUym@K0`-?a$m;CZNhN?>W3lrmxiXVwNb;)%89NoLtK=Tx% zX7V$*BMf>eu=Wgl!{SXPXVufazxQ3(`+a}*{zvZ@dbEGE-ZMXaN%%)r!|4cFIreAy zFAeJ0GuhCpLSPX)MJ2?14qHJi862W;>;NUJE&sRKi<(C@WUDNmkOP_it`Wa81x8C*orDywYf2?1B zxqg1&&!8EXeU?7YzPNSE&iCK$$~R0aJw5%<9EfX{o~_;f{tv^Jb+P+Io|%B1q?`M0 z_g1+>>#f#Rm;U{<)L=QpDVfFh*FI&ayIOcQXxF|F6xFe|HSwh}?}6#m9n}R>o4k?qCrn(+@W61&9N(jfR1yTdg(%f_^K&wY`X)NnwZ>Z)mpmnpk9b3FK^jG zugr`MLr$sa%7rE#5fi1nnp;R=UR|-##3!Ox%KLE3pl7OhPNF|r^8efO^YRZCKI%VU zd_=x6y~CdAyg)t6JjH(;HqL(pE82c2f8hD({y>r}1qbKL|7T8}CC$B{jQI?(mS*sD L^>bP0l+XkK?b_so diff --git a/src/main/resources/assets/naturesaura/textures/gui/patchouli/elements.png b/src/main/resources/assets/naturesaura/textures/gui/patchouli/elements.png index 608830e5eda87b72b520c519c9da9ac030de1eb4..706d52559f18f85492f203dd1cc8ff2ce643bff7 100644 GIT binary patch literal 4102 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 literal 4623 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 diff --git a/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/altar.json b/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/altar.json index 60012a56..5c3659b3 100644 --- a/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/altar.json +++ b/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/altar.json @@ -4,13 +4,13 @@ { "type": "item", "item": "#input", - "x": 24, + "x": 14, "y": 26 }, { "type": "item", "item": "#output", - "x": 76, + "x": 82, "y": 26, "link_recipe": true }, @@ -18,24 +18,30 @@ "group": "catalyst", "type": "item", "item": "#catalyst", - "x": 50, - "y": 28 + "x": 36, + "y": 26 + }, + { + "type": "item", + "item": "#type", + "x": 58, + "y": 26 }, { "group": "altar", "type": "item", "item": "naturesaura:nature_altar", - "x": 50, + "x": 36, "y": 26 }, { "type": "image", "image": "naturesaura:textures/gui/patchouli/elements.png", - "x": 20, + "x": 10, "y": 13, "u": 0, "v": 0, - "width": 75, + "width": 91, "height": 44 }, { diff --git a/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/offering.json b/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/offering.json index 8e903090..bb93fbfe 100644 --- a/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/offering.json +++ b/src/main/resources/data/naturesaura/patchouli_books/book/en_us/templates/offering.json @@ -6,7 +6,7 @@ "image": "naturesaura:textures/gui/patchouli/elements.png", "x": 16, "y": 13, - "u": 76, + "u": 92, "v": 0, "width": 84, "height": 38 diff --git a/src/main/resources/data/naturesaura/recipes/gold_nether_brick.json b/src/main/resources/data/naturesaura/recipes/gold_nether_brick.json new file mode 100644 index 00000000..8ebcef60 --- /dev/null +++ b/src/main/resources/data/naturesaura/recipes/gold_nether_brick.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:nether_bricks" + }, + { + "item": "naturesaura:gold_fiber" + } + ], + "result": { + "item": "naturesaura:gold_nether_brick" + } +} \ No newline at end of file