This commit is contained in:
Ell 2021-12-16 21:56:27 +01:00
parent 65cce7fae5
commit 8fd1b0333e
315 changed files with 435 additions and 452 deletions

View file

@ -108,9 +108,8 @@ dependencies {
/* compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.6.1.75:api")
runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.6.1.75")*/
// TODO Patchouli
/* compileOnly fg.deobf("vazkii.patchouli:Patchouli:1.16.4-50:api")
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:1.16.4-50")*/
compileOnly fg.deobf("vazkii.patchouli:Patchouli:1.18.1-61:api")
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:1.18.1-61")
// TODO Curios
/* runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.0.5.0")

View file

@ -151,7 +151,7 @@ public class BlockDimensionRail extends BaseRailBlock implements IModItem, ICust
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(SHAPE);
builder.add(SHAPE, WATERLOGGED);
}
@Override

View file

@ -10,7 +10,6 @@ import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@ -81,7 +80,7 @@ public class BlockFurnaceHeater extends BlockContainerImpl implements ICustomBlo
@Override
public VoxelShape getShape(BlockState state, BlockGetter levelIn, BlockPos pos, CollisionContext context) {
return SHAPES[state.getValue(FACING).ordinal()];
return SHAPES[state.getValue(FACING).get3DDataValue()];
}
@Override

View file

@ -50,16 +50,16 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock,
var w = state.getValue(WEST) != RedstoneSide.NONE;
if (n || s && !n && !e && !w) {
i |= 1 << Direction.NORTH.ordinal();
i |= 1 << Direction.NORTH.get2DDataValue();
}
if (e || w && !n && !e && !s) {
i |= 1 << Direction.EAST.ordinal();
i |= 1 << Direction.EAST.get2DDataValue();
}
if (s || n && !e && !s && !w) {
i |= 1 << Direction.SOUTH.ordinal();
i |= 1 << Direction.SOUTH.get2DDataValue();
}
if (w || e && !n && !s && !w) {
i |= 1 << Direction.WEST.ordinal();
i |= 1 << Direction.WEST.get2DDataValue();
}
return i;
}

View file

@ -11,6 +11,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
// TODO get the 1-pixel border around the ender overlay back
@OnlyIn(Dist.CLIENT)
public class RenderEnderCrate implements BlockEntityRenderer<BlockEntityEnderCrate> {

View file

@ -1,36 +1,57 @@
package de.ellpeck.naturesaura.compat.patchouli;
import com.mojang.blaze3d.systems.RenderSystem;
import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.multiblock.Matcher;
import de.ellpeck.naturesaura.compat.ICompat;
import de.ellpeck.naturesaura.data.ItemTagProvider;
import de.ellpeck.naturesaura.events.ClientEvents;
import de.ellpeck.naturesaura.renderers.SupporterFancyHandler;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import vazkii.patchouli.api.BookDrawScreenEvent;
import vazkii.patchouli.api.IMultiblock;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.PatchouliAPI;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
// TODO Patchouli
public class PatchouliCompat implements ICompat {
private static final ResourceLocation BOOK = new ResourceLocation(NaturesAura.MOD_ID, "book");
/*
private static final Map<ResourceLocation, IMultiblock> MULTIBLOCKS = new HashMap<>();
*/
public static void addPatchouliMultiblock(ResourceLocation name, String[][] pattern, Object... rawMatchers) {
/* for (int i = 1; i < rawMatchers.length; i += 2) {
if (rawMatchers[i] instanceof Matcher) {
Matcher matcher = (Matcher) rawMatchers[i];
Matcher.ICheck check = matcher.getCheck();
for (var i = 1; i < rawMatchers.length; i += 2) {
if (rawMatchers[i] instanceof Matcher matcher) {
var check = matcher.check();
if (check == null)
rawMatchers[i] = PatchouliAPI.get().anyMatcher();
else
rawMatchers[i] = PatchouliAPI.get().predicateMatcher(matcher.getDefaultState(),
rawMatchers[i] = PatchouliAPI.get().predicateMatcher(matcher.defaultState(),
state -> check.matches(null, null, null, null, state, (char) 0));
}
}
MULTIBLOCKS.put(name, PatchouliAPI.get().makeMultiblock(pattern, rawMatchers));*/
MULTIBLOCKS.put(name, PatchouliAPI.get().makeMultiblock(pattern, rawMatchers));
}
@SuppressWarnings("unchecked")
@ -41,20 +62,20 @@ public class PatchouliCompat implements ICompat {
return (T) manager.byKey(pre).orElse(null);
}
/* public static IVariable ingredientVariable(Ingredient ingredient) {
return IVariable.wrapList(Arrays.stream(ingredient.getMatchingStacks())
public static IVariable ingredientVariable(Ingredient ingredient) {
return IVariable.wrapList(Arrays.stream(ingredient.getItems())
.map(IVariable::from).collect(Collectors.toList()));
}*/
}
@Override
public void setup(FMLCommonSetupEvent event) {
/* event.enqueueWork(() -> {
for (Map.Entry<ResourceLocation, IMultiblock> entry : MULTIBLOCKS.entrySet())
event.enqueueWork(() -> {
for (var entry : MULTIBLOCKS.entrySet())
PatchouliAPI.get().registerMultiblock(entry.getKey(), entry.getValue());
PatchouliAPI.get().setConfigFlag(NaturesAura.MOD_ID + ":rf_converter", ModConfig.instance.rfConverter.get());
PatchouliAPI.get().setConfigFlag(NaturesAura.MOD_ID + ":chunk_loader", ModConfig.instance.chunkLoader.get());
});*/
});
}
@Override
@ -67,66 +88,66 @@ public class PatchouliCompat implements ICompat {
}
/* @SubscribeEvent
@SubscribeEvent
@OnlyIn(Dist.CLIENT)
public void onBookDraw(BookDrawScreenEvent event) {
if (event.book == null || !event.book.equals(BOOK))
var book = event.getBook();
var gui = event.getScreen();
if (book == null || !book.equals(BOOK))
return;
LocalDateTime now = LocalDateTime.now();
var now = LocalDateTime.now();
if (now.getMonth() == Month.MAY && now.getDayOfMonth() == 21) {
int x = event.gui.width / 2 + 272 / 2 - 16;
int y = event.gui.height / 2 - 180 / 2 - 26;
var x = gui.width / 2 + 272 / 2 - 16;
var y = gui.height / 2 - 180 / 2 - 26;
RenderHelper.disableStandardItemLighting();
GlStateManager.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
AbstractGui.blit(event.matrixStack, x, y, 469, 0, 43, 42, 512, 256);
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
Screen.blit(event.getPoseStack(), x, y, 469, 0, 43, 42, 512, 256);
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 43 && event.mouseY < y + 42)
GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList(new StringTextComponent("It's the author Ellpeck's birthday!").setStyle(Style.EMPTY.setFormatting(TextFormatting.GOLD))),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 43 && event.getMouseY() < y + 42)
gui.renderComponentTooltip(event.getPoseStack(),
Collections.singletonList(new TextComponent("It's the author Ellpeck's birthday!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GOLD))),
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font);
} else if (now.getMonth() == Month.JUNE) {
int x = event.gui.width / 2 + 272 / 2;
int y = event.gui.height / 2 - 180 / 2 + 16;
var x = gui.width / 2 + 272 / 2;
var y = gui.height / 2 - 180 / 2 + 16;
RenderHelper.disableStandardItemLighting();
GlStateManager.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
AbstractGui.blit(event.matrixStack, x, y, 424, 0, 45, 26, 512, 256);
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
Screen.blit(event.getPoseStack(), x, y, 424, 0, 45, 26, 512, 256);
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 45 && event.mouseY < y + 26)
GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList(new StringTextComponent("§6Happy §4P§6r§ei§2d§9e§5!")),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 45 && event.getMouseY() < y + 26)
gui.renderComponentTooltip(event.getPoseStack(),
Collections.singletonList(new TextComponent("§6Happy §4P§6r§ei§2d§9e§5!")),
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font);
}
String name = event.gui.getMinecraft().player.getName().getString();
FancyInfo info = SupporterFancyHandler.FANCY_INFOS.get(name);
var name = gui.getMinecraft().player.getName().getString();
var info = SupporterFancyHandler.FANCY_INFOS.get(name);
if (info != null) {
int x = event.gui.width / 2 - 272 / 2 + 20;
int y = event.gui.height / 2 + 180 / 2;
var x = gui.width / 2 - 272 / 2 + 20;
var y = gui.height / 2 + 180 / 2;
RenderHelper.disableStandardItemLighting();
RenderSystem.color4f(1, 1, 1, 1);
event.gui.getMinecraft().getTextureManager().bindTexture(ClientEvents.BOOK_GUI);
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
AbstractGui.blit(event.matrixStack, x, y, 496, 44, 16, 18, 512, 256);
if (info.tier == 1) {
AbstractGui.blit(event.matrixStack, x, y, 496 - 16, 44, 16, 18, 512, 256);
Screen.blit(event.getPoseStack(), x, y, 496, 44, 16, 18, 512, 256);
if (info.tier() == 1) {
Screen.blit(event.getPoseStack(), x, y, 496 - 16, 44, 16, 18, 512, 256);
} else {
float r = ((info.color >> 16) & 255) / 255F;
float g = ((info.color >> 8) & 255) / 255F;
float b = (info.color & 255) / 255F;
RenderSystem.color3f(r, g, b);
AbstractGui.blit(event.matrixStack, x, y, 496 - 32, 44, 16, 18, 512, 256);
var r = ((info.color() >> 16) & 255) / 255F;
var g = ((info.color() >> 8) & 255) / 255F;
var b = (info.color() & 255) / 255F;
// TODO apply leaf color?
//RenderSystem.color3f(r, g, b);
Screen.blit(event.getPoseStack(), x, y, 496 - 32, 44, 16, 18, 512, 256);
}
if (event.mouseX >= x && event.mouseY >= y && event.mouseX < x + 16 && event.mouseY < y + 18)
GuiUtils.drawHoveringText(event.matrixStack,
Collections.singletonList(new StringTextComponent("Thanks for your support, " + name + "!").setStyle(Style.EMPTY.setFormatting(TextFormatting.YELLOW))),
event.mouseX, event.mouseY, event.gui.width, event.gui.height, 0, event.gui.getMinecraft().fontRenderer);
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 16 && event.getMouseY() < y + 18)
gui.renderComponentTooltip(event.getPoseStack(),
Collections.singletonList(new TextComponent("Thanks for your support, " + name + "!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.YELLOW))),
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font);
}
}*/
}
}

View file

@ -1,8 +1,7 @@
/*
package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.AltarRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Ingredient;
import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider;
@ -20,26 +19,14 @@ public class ProcessorAltar implements IComponentProcessor {
public IVariable process(String key) {
if (this.recipe == null)
return null;
switch (key) {
case "input":
return PatchouliCompat.ingredientVariable(this.recipe.input);
case "output":
return IVariable.from(this.recipe.output);
case "catalyst":
if (this.recipe.catalyst != Ingredient.EMPTY)
return PatchouliCompat.ingredientVariable(this.recipe.catalyst);
else
return null;
case "type":
if (this.recipe.requiredType != null)
return IVariable.from(this.recipe.getDimensionBottle());
else
return null;
case "name":
return IVariable.wrap(this.recipe.output.getDisplayName().getString());
default:
return null;
}
return switch (key) {
case "input" -> PatchouliCompat.ingredientVariable(this.recipe.input);
case "output" -> IVariable.from(this.recipe.output);
case "catalyst" -> this.recipe.catalyst != Ingredient.EMPTY ? PatchouliCompat.ingredientVariable(this.recipe.catalyst) : null;
case "type" -> this.recipe.requiredType != null ? IVariable.from(this.recipe.getDimensionBottle()) : null;
case "name" -> IVariable.wrap(this.recipe.output.getDisplayName().getString());
default -> null;
};
}
@Override
@ -47,4 +34,3 @@ public class ProcessorAltar implements IComponentProcessor {
return group.isEmpty() || group.equals(this.recipe.catalyst == Ingredient.EMPTY ? "altar" : "catalyst");
}
}
*/

View file

@ -1,9 +1,8 @@
/*
package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.ForgeSpawnEggItem;
import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider;
@ -22,23 +21,15 @@ public class ProcessorAnimalSpawner implements IComponentProcessor {
if (this.recipe == null)
return null;
if (key.startsWith("input")) {
int id = Integer.parseInt(key.substring(5)) - 1;
if (this.recipe.ingredients.length > id)
return PatchouliCompat.ingredientVariable(this.recipe.ingredients[id]);
else
return null;
var id = Integer.parseInt(key.substring(5)) - 1;
return this.recipe.ingredients.length > id ? PatchouliCompat.ingredientVariable(this.recipe.ingredients[id]) : null;
} else {
switch (key) {
case "name":
return IVariable.wrap(this.recipe.entity.getName().getString());
case "entity":
return IVariable.wrap(this.recipe.entity.getRegistryName().toString());
case "egg":
ItemStack egg = new ItemStack(SpawnEggItem.getEgg(this.recipe.entity));
return IVariable.from(egg);
default:
return null;
}
return switch (key) {
case "name" -> IVariable.wrap(this.recipe.entity.getDescription().getString());
case "entity" -> IVariable.wrap(this.recipe.entity.getRegistryName().toString());
case "egg" -> IVariable.from(new ItemStack(ForgeSpawnEggItem.fromEntityType(this.recipe.entity)));
default -> null;
};
}
}
@ -47,4 +38,3 @@ public class ProcessorAnimalSpawner implements IComponentProcessor {
return !"seekrit".equals(group);
}
}
*/

View file

@ -1,4 +1,3 @@
/*
package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.OfferingRecipe;
@ -19,18 +18,12 @@ public class ProcessorOffering implements IComponentProcessor {
public IVariable process(String key) {
if (this.recipe == null)
return null;
switch (key) {
case "input":
return PatchouliCompat.ingredientVariable(this.recipe.input);
case "output":
return IVariable.from(this.recipe.output);
case "start":
return PatchouliCompat.ingredientVariable(this.recipe.startItem);
case "name":
return IVariable.wrap(this.recipe.output.getDisplayName().getString());
default:
return null;
}
return switch (key) {
case "input" -> PatchouliCompat.ingredientVariable(this.recipe.input);
case "output" -> IVariable.from(this.recipe.output);
case "start" -> PatchouliCompat.ingredientVariable(this.recipe.startItem);
case "name" -> IVariable.wrap(this.recipe.output.getDisplayName().getString());
default -> null;
};
}
}
*/

View file

@ -1,4 +1,3 @@
/*
package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.TreeRitualRecipe;
@ -20,23 +19,15 @@ public class ProcessorTreeRitual implements IComponentProcessor {
if (this.recipe == null)
return null;
if (key.startsWith("input")) {
int id = Integer.parseInt(key.substring(5)) - 1;
if (this.recipe.ingredients.length > id)
return PatchouliCompat.ingredientVariable(this.recipe.ingredients[id]);
else
return null;
var id = Integer.parseInt(key.substring(5)) - 1;
return this.recipe.ingredients.length > id ? PatchouliCompat.ingredientVariable(this.recipe.ingredients[id]) : null;
} else {
switch (key) {
case "output":
return IVariable.from(this.recipe.result);
case "sapling":
return PatchouliCompat.ingredientVariable(this.recipe.saplingType);
case "name":
return IVariable.wrap(this.recipe.result.getDisplayName().getString());
default:
return null;
}
return switch (key) {
case "output" -> IVariable.from(this.recipe.result);
case "sapling" -> PatchouliCompat.ingredientVariable(this.recipe.saplingType);
case "name" -> IVariable.wrap(this.recipe.result.getDisplayName().getString());
default -> null;
};
}
}
}
*/

View file

@ -9,13 +9,15 @@ import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;
import net.minecraftforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
public class BlockTagProvider extends BlockTagsProvider {
public static final Tags.IOptionalNamedTag<Block> NETHER_ALTAR_WOOD = BlockTags.createOptional(new ResourceLocation(NaturesAura.MOD_ID, "nether_altar_wood"));
public BlockTagProvider(DataGenerator generatorIn) {
super(generatorIn);
public BlockTagProvider(DataGenerator gen, @Nullable ExistingFileHelper existingFileHelper) {
super(gen, NaturesAura.MOD_ID, existingFileHelper);
}
@Override

View file

@ -1,7 +1,5 @@
package de.ellpeck.naturesaura.data;
import net.minecraft.data.DataGenerator;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.forge.event.lifecycle.GatherDataEvent;
@ -13,7 +11,7 @@ public final class ModData {
public static void gatherData(GatherDataEvent event) {
var generator = event.getGenerator();
var ex = event.getExistingFileHelper();
var blockTags = new BlockTagProvider(generator);
var blockTags = new BlockTagProvider(generator, ex);
generator.addProvider(blockTags);
generator.addProvider(new ItemTagProvider(generator, blockTags, ex));
generator.addProvider(new BlockLootProvider(generator));

View file

@ -26,6 +26,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.NetworkHooks;
// TODO these behave very weirdly in-world
public class EntityEffectInhibitor extends Entity implements IVisualizable {
private static final EntityDataAccessor<String> INHIBITED_EFFECT = SynchedEntityData.defineId(EntityEffectInhibitor.class, EntityDataSerializers.STRING);

View file

@ -11,21 +11,22 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import net.minecraft.world.level.levelgen.feature.TreeFeature;
import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material;
import java.util.Random;
import static net.minecraft.core.Direction.Axis;
public class LevelGenAncientTree extends Feature<TreeConfiguration> {
public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
public LevelGenAncientTree() {
super(Codec.unit(ModFeatures.Configured.ANCIENT_TREE.config()));
super(Codec.unit(FeatureConfiguration.NONE));
}
@Override
public boolean place(FeaturePlaceContext<TreeConfiguration> ctx) {
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> ctx) {
var level = ctx.level();
var pos = ctx.origin();
var rand = ctx.random();

View file

@ -23,6 +23,7 @@ import java.util.function.Supplier;
@OnlyIn(Dist.CLIENT)
public final class ParticleHandler {
// TODO fix particle transparency, they don't seem to fade on the edges anymore
public static final ParticleRenderType MAGIC = new ParticleRenderType() {
@Override

View file

@ -1,7 +1,7 @@
{
"name": "Ancient Trees",
"icon": "naturesaura:ancient_leaves",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:wood_stand",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Disentangler of Mortals",
"icon": "naturesaura:animal_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:tainted_gold",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Reaper of Ender Heights",
"icon": "naturesaura:chorus_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Rose of Oblivion",
"icon": "naturesaura:end_flower",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:end_flower",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Firecracker Gaze",
"icon": "naturesaura:firework_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Herbivorous Absorber",
"icon": "naturesaura:flower_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Creational Catalyst",
"icon": "naturesaura:generator_limit_remover",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:offering",
"priority": true,
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Swamp Homi",
"icon": "naturesaura:moss_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Canopy Diminisher",
"icon": "naturesaura:oak_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "On Creating Aura",
"icon": "naturesaura:gold_leaf",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:wood_stand",
"priority": true,
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Ritual of the Brewer",
"icon": "naturesaura:potion_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Shooting Mark",
"icon": "naturesaura:projectile_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:tainted_gold",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Offshoot Observer",
"icon": "naturesaura:slime_split_generator",
"category": "creating",
"category": "naturesaura:creating",
"advancement": "naturesaura:tainted_gold",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Corporeal Eye",
"icon": "naturesaura:animal_container",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:eye",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura Detector",
"icon": "naturesaura:aura_detector",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Redstone Aura Vaporizer",
"icon": "naturesaura:aura_timer",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Automatic Constructor",
"icon": "naturesaura:auto_crafter",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Adept Hopper",
"icon": "naturesaura:grated_chute",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Item Distributor",
"icon": "naturesaura:item_distributor",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura Attraction Cart",
"icon": "naturesaura:mover_cart",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Item Grounder",
"icon": "naturesaura:pickup_stopper",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Powder Manipulator",
"icon": "naturesaura:powder_placer",
"category": "devices",
"category": "naturesaura:devices",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Inexplicable Anger",
"icon": "minecraft:fire_charge",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:negative_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Increase of Fertility",
"icon": "minecraft:egg",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Breathlessness",
"icon": "minecraft:white_wool",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:negative_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Natural Storage",
"icon": "naturesaura:aura_cache",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Natural Decay",
"icon": "naturesaura:decayed_leaves",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:negative_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Effect Powder",
"icon": "naturesaura:effect_powder{effect:'naturesaura:plant_boost'}",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"priority": true,
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Unstable Outbreak",
"icon": "minecraft:tnt",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:negative_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Crimson Decay",
"icon": "minecraft:soul_sand",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:negative_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Crimson Overgrowth",
"icon": "naturesaura:nether_grass",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Mineral Amassing",
"icon": "minecraft:diamond_ore",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Vegetational Increase",
"icon": "minecraft:wheat_seeds",
"category": "effects",
"category": "naturesaura:effects",
"advancement": "naturesaura:positive_imbalance",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura, conceptually",
"icon": "naturesaura:gold_leaf",
"category": "intro",
"category": "naturesaura:intro",
"pages": [
{
"type": "text",

View file

@ -1,7 +1,7 @@
{
"name": "Baubles",
"icon": "minecraft:totem_of_undying",
"category": "intro",
"category": "naturesaura:intro",
"read_by_default": true,
"flag": "mod:baubles",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Magical Botany",
"icon": "minecraft:oak_sapling",
"category": "intro",
"category": "naturesaura:intro",
"pages": [
{
"type": "text",

View file

@ -1,7 +1,7 @@
{
"name": "This Book",
"icon": "patchouli:guide_book{'patchouli:book':'naturesaura:book'}",
"category": "intro",
"category": "naturesaura:intro",
"priority": true,
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura Cache",
"icon": "naturesaura:aura_cache",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:infused_materials",
"priority": true,
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Aura Trove",
"icon": "naturesaura:aura_trove",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Eir's Token",
"icon": "naturesaura:break_prevention",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Staff of Shadows",
"icon": "naturesaura:cave_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Bucket of Infinite Color",
"icon": "naturesaura:color_changer",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Crimson Meal",
"icon": "naturesaura:crimson_meal",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:aura_bottle_nether",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Ring of Last Chance",
"icon": "naturesaura:death_ring",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Eye of the Shulker",
"icon": "naturesaura:end_city_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Ender Ocular",
"icon": "naturesaura:ender_access",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Environmental Eye",
"icon": "naturesaura:eye",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:wood_stand",
"turnin": "naturesaura:eye",
"priority": true,

View file

@ -1,7 +1,7 @@
{
"name": "Environmental Ocular",
"icon": "naturesaura:eye_improved",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:end_flower",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Eye of the Blaze",
"icon": "naturesaura:fortress_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:aura_bottle_nether",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Botanist's Armor",
"icon": "naturesaura:infused_iron_chest",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Botanist's Tools",
"icon": "naturesaura:infused_iron_pickaxe",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Staff of Baldur",
"icon": "naturesaura:light_staff",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Staff of Riches",
"icon": "naturesaura:loot_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Staff of Ancient Knowledge",
"icon": "naturesaura:netherite_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Eye of the Pillager",
"icon": "naturesaura:outpost_finder",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:aura_bottle_overworld",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Token of Undying Friendship",
"icon": "naturesaura:pet_reviver",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Mystical Magnifier",
"icon": "naturesaura:range_visualizer",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Amulet of Wrath",
"icon": "naturesaura:shockwave_creator",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:tainted_gold",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Skyseeker's Armor",
"icon": "naturesaura:sky_chest",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Skyseeker's Tools",
"icon": "naturesaura:sky_pickaxe",
"category": "items",
"category": "naturesaura:items",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura Bottling",
"icon": "naturesaura:aura_bottle{stored_type:'naturesaura:overworld'}",
"category": "practices",
"category": "naturesaura:practices",
"advancement": "naturesaura:wood_stand",
"turnin": "naturesaura:aura_bottle_overworld",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Aura Plants",
"icon": "naturesaura:aura_bloom",
"category": "practices",
"category": "naturesaura:practices",
"pages": [
{
"type": "text",

View file

@ -1,7 +1,7 @@
{
"name": "Brilliant Trees",
"icon": "naturesaura:gold_leaf",
"category": "practices",
"category": "naturesaura:practices",
"priority": true,
"turnin": "naturesaura:gold_leaf",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Offering to the Gods",
"icon": "naturesaura:offering_table",
"category": "practices",
"category": "naturesaura:practices",
"advancement": "naturesaura:tainted_gold",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Ritual of the Forest",
"icon": "naturesaura:wood_stand",
"category": "practices",
"category": "naturesaura:practices",
"advancement": "naturesaura:gold_leaf",
"priority": true,
"turnin": "naturesaura:wood_stand",

View file

@ -1,7 +1,7 @@
{
"name": "The Natural Altar",
"icon": "naturesaura:nature_altar",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_overworld",
"priority": true,
"turnin": "naturesaura:infused_materials",

View file

@ -1,7 +1,7 @@
{
"name": "Altar of Birthing",
"icon": "naturesaura:animal_spawner",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Nature's Mend",
"icon": "minecraft:enchanted_book",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_tools",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Nature's Heal",
"icon": "minecraft:enchanted_book",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_tools",
"flag": "mod:enchantability",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Armorer's Aid",
"icon": "naturesaura:blast_furnace_booster",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "World Eye",
"icon": "naturesaura:chunk_loader",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_end",
"flag": "naturesaura:chunk_loader",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Transmutation Catalyst",
"icon": "naturesaura:conversion_catalyst",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "The Crimson Altar",
"icon": "naturesaura:nature_altar",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_nether",
"priority": true,
"turnin": "naturesaura:tainted_gold",

View file

@ -1,7 +1,7 @@
{
"name": "Crumbling Catalyst",
"icon": "naturesaura:crushing_catalyst",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Rails of the Worlds",
"icon": "naturesaura:dimension_rail_nether",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Ender Crate",
"icon": "naturesaura:ender_crate",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Aura Field Creator",
"icon": "naturesaura:field_creator",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Extraneous Firestarter",
"icon": "naturesaura:furnace_heater",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Hopper Enhancement",
"icon": "naturesaura:hopper_upgrade",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Imperceptible Builder",
"icon": "naturesaura:placer",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:infused_materials",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Energetic Aura Forge",
"icon": "naturesaura:rf_converter",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"flag": "naturesaura:rf_converter",
"pages": [

View file

@ -1,7 +1,7 @@
{
"name": "Winter's Calling",
"icon": "naturesaura:snow_creator",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:sky_ingot",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Lamp of Sanctuary",
"icon": "naturesaura:spawn_lamp",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Everlasting Spring",
"icon": "naturesaura:spring",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:offering",
"pages": [
{

View file

@ -1,7 +1,7 @@
{
"name": "Shifting Sundial",
"icon": "naturesaura:time_changer",
"category": "using",
"category": "naturesaura:using",
"advancement": "naturesaura:aura_bottle_end",
"pages": [
{

Some files were not shown because too many files have changed in this diff Show more