Skip to content

Commit

Permalink
Merge pull request #218 from Kanzaji/EEV2-1.19-Dev
Browse files Browse the repository at this point in the history
Add Validation for Data Json Files with feedback to the end user.
  • Loading branch information
Ridanisaurus authored Jun 24, 2024
2 parents 5916fbf + a0e217d commit 0db4f33
Show file tree
Hide file tree
Showing 47 changed files with 2,934 additions and 214 deletions.
Empty file removed logs/debug.log
Empty file.
Empty file removed logs/latest.log
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
package com.ridanisaurus.emendatusenigmatica;

import com.ridanisaurus.emendatusenigmatica.config.EEConfig;
import com.ridanisaurus.emendatusenigmatica.core.mixin.OreVeinifierMixin;
import com.ridanisaurus.emendatusenigmatica.datagen.base.DataGeneratorFactory;
import com.ridanisaurus.emendatusenigmatica.datagen.base.EEPackFinder;
import com.ridanisaurus.emendatusenigmatica.loader.EELoader;
Expand All @@ -43,13 +42,13 @@
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModLoader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import org.jetbrains.annotations.NotNull;

// The value here should match an entry in the META-INF/mods.toml file
@Mod(Reference.MOD_ID)
Expand All @@ -71,6 +70,7 @@ public static EmendatusEnigmatica getInstance() {
public EmendatusEnigmatica() {
EmendatusEnigmatica.instance = this;
EEConfig.registerClient();
EEConfig.setupCommon();

// Register Deferred Registers and populate their tables once the mod is done constructing
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
Expand Down Expand Up @@ -102,7 +102,7 @@ private void commonEvents(FMLCommonSetupEvent event) {

public static final CreativeModeTab TAB = new CreativeModeTab("emendatusenigmatica") {
@Override
public ItemStack makeIcon() {
public @NotNull ItemStack makeIcon() {
return new ItemStack(EERegistrar.ENIGMATIC_HAMMER.get());
}
};
Expand All @@ -113,14 +113,20 @@ private static void registerDataGen() {
EmendatusEnigmatica.getInstance().getLoader().datagen(generator);
}

public static void generate() {
public static void generate() {
if (!hasGenerated) {
try {
if(generator == null)
registerDataGen();
generator.run();
} catch (IOException e) {
e.printStackTrace();
if(generator == null) registerDataGen();
if (!ModLoader.isLoadingStateValid()) {
LOGGER.error("Loading state is invalid! Aborting running Data Generation to avoid even more issues.");
return;
}
generator.run();
} catch (Throwable e) {
LOGGER.error("Exception caught while running data generation!", e);
if (ModLoader.isLoadingStateValid()) throw new RuntimeException(e);
LOGGER.error("It was probably caused by another mod crashing before Data Generation, as LoadingState is already invalid!");
return;
}
hasGenerated = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.ridanisaurus.emendatusenigmatica.loader.parser.model.CompatModel;
import com.ridanisaurus.emendatusenigmatica.loader.parser.model.MaterialModel;
import com.ridanisaurus.emendatusenigmatica.loader.parser.model.StrataModel;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -29,10 +30,25 @@ public EmendatusDataRegistry() {
this.strataByIndex = new HashMap<>();
}

/**
* Used to register new Material model, returning passed defaultModel or previous value under that id.
* @param material ID of the material.
* @param defaultModel MaterialModel to register under that id.
* @return MaterialModel passed to the argument or previous MaterialModel that was registered under that id.
*/
public MaterialModel getMaterialOrRegister(String material, MaterialModel defaultModel){
return this.materials.computeIfAbsent(material, s -> defaultModel);
}

/**
* Used to get MaterialModel by its ID.
* @param materialID MaterialID to get model of.
* @return MaterialModel under that ID, or null if not registered.
*/
public @Nullable MaterialModel getMaterialByID(String materialID) {
return this.materials.get(materialID);
}

public void registerStrata(StrataModel strataModel){
this.strata.add(strataModel);
this.strataByIndex.put(strataModel.getFillerType().toString(), this.strata.size() - 1);
Expand All @@ -55,6 +71,10 @@ public List<CompatModel> getCompat() {
return ImmutableList.copyOf(compat);
}

/**
* Used to get Map with Strata Filler Types mapped to indexes of {@link EmendatusDataRegistry#strata} list.
* @return Map with mapping of Strata Filler Type -> Index of the model
*/
public Map<String, Integer> getStrataByIndex() {
return strataByIndex;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,66 @@

package com.ridanisaurus.emendatusenigmatica.config;

import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.ridanisaurus.emendatusenigmatica.EmendatusEnigmatica;
import com.ridanisaurus.emendatusenigmatica.util.Reference;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.config.ConfigFileTypeHandler;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.loading.FMLPaths;
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.NotNull;

import java.nio.file.Path;


public class EEConfig {
public static ClientConfig client;
public static CommonConfig common;

public static void registerClient() {
Pair<ClientConfig, ForgeConfigSpec> clientSpecPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new);
client = clientSpecPair.getLeft();
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, clientSpecPair.getRight());
EmendatusEnigmatica.LOGGER.info("Emendatus Enigmatica Client Config has been registered.");
}

public static void setupCommon() {
Pair<CommonConfig, ForgeConfigSpec> commonSpecPair = new ForgeConfigSpec.Builder().configure(CommonConfig::new);
common = commonSpecPair.getLeft();
ForgeConfigSpec commonSpec = commonSpecPair.getRight();

try {
// Even tho this uses ModConfig object,
// which will be tracked for changes,
// there are no listeners for this config, so it's going to be fine.
CommentedFileConfig configData = new ConfigFileTypeHandler()
.reader(FMLPaths.CONFIGDIR.get())
.apply(new ModConfig(ModConfig.Type.COMMON, commonSpec, ModLoadingContext.get().getActiveContainer()));
commonSpec.setConfig(configData);
EmendatusEnigmatica.LOGGER.info("EmendatusEnigmatica Common Config has been parsed.");
} catch (Exception e) {
EmendatusEnigmatica.LOGGER.error("Failed parsing Common config!", e);
throw new IllegalStateException("Common Config for EmendatusEnigmatica wasn't possible to parse.", e);
}
}

public static class CommonConfig {
public final ForgeConfigSpec.BooleanValue logConfigErrors;
CommonConfig(ForgeConfigSpec.@NotNull Builder builder) {
builder.push("Debug");
logConfigErrors = builder
.comment("Whether EmendatusEnigmatica should log warnings and errors generated on the configuration parsing.")
.translation(Reference.MOD_ID + ".config.common.log_errors")
.define("logConfigErrors", true);
builder.pop();
}
}

public static class ClientConfig {
public final ForgeConfigSpec.BooleanValue showPatreonReward;
ClientConfig(ForgeConfigSpec.Builder builder) {
ClientConfig(ForgeConfigSpec.@NotNull Builder builder) {
builder.push("Patreon Reward");
showPatreonReward = builder
.comment("Whether the Patreon Reward should appear floating over the player's head")
Expand All @@ -44,12 +92,4 @@ public static class ClientConfig {
builder.pop();
}
}

public static void registerClient() {
Pair<ClientConfig, ForgeConfigSpec> clientSpecPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new);
ForgeConfigSpec clientSpec = clientSpecPair.getRight();
client = clientSpecPair.getLeft();
ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.CLIENT, clientSpec);
EmendatusEnigmatica.LOGGER.info("Emendatus Enigmatica Config has been parsed.");
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.ridanisaurus.emendatusenigmatica.core.mixin;

import com.ridanisaurus.emendatusenigmatica.EmendatusEnigmatica;
import com.ridanisaurus.emendatusenigmatica.api.EmendatusDataRegistry;
import com.ridanisaurus.emendatusenigmatica.loader.parser.model.MaterialModel;
import com.ridanisaurus.emendatusenigmatica.plugin.DefaultConfigPlugin;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Blocks;
Expand All @@ -13,6 +14,8 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;

import java.util.Objects;

@Mixin(OreVeinifier.class)
public class OreVeinifierMixin {

Expand Down Expand Up @@ -48,16 +51,19 @@ protected static NoiseChunk.BlockStateFiller create(DensityFunction dFunction1,
if ((double)randomsource.nextFloat() < d3 && dFunction3.compute(filler) > (double)-0.3F) {
BlockState mixinRawOreBlock = oreveinifier$veintype.rawOreBlock;
BlockState mixinOreBlock = oreveinifier$veintype.ore;
for (MaterialModel material : DefaultConfigPlugin.MATERIALS) {
if (oreveinifier$veintype == OreVeinifier.VeinType.COPPER && material.getId().equals("copper") && material.getDisableDefaultOre()) {
mixinRawOreBlock = Blocks.STONE.defaultBlockState();
mixinOreBlock = Blocks.STONE.defaultBlockState();
}
if (oreveinifier$veintype == OreVeinifier.VeinType.IRON && material.getId().equals("iron") && material.getDisableDefaultOre()) {
mixinRawOreBlock = Blocks.DEEPSLATE.defaultBlockState();
mixinOreBlock = Blocks.DEEPSLATE.defaultBlockState();
}

EmendatusDataRegistry registry = EmendatusEnigmatica.getInstance().getLoader().getDataRegistry();
MaterialModel copper = registry.getMaterialByID("copper");
MaterialModel iron = registry.getMaterialByID("iron");

if (oreveinifier$veintype == OreVeinifier.VeinType.COPPER && Objects.nonNull(copper) && copper.getDisableDefaultOre()) {
mixinRawOreBlock = Blocks.STONE.defaultBlockState();
mixinOreBlock = Blocks.STONE.defaultBlockState();
} else if (oreveinifier$veintype == OreVeinifier.VeinType.IRON && Objects.nonNull(iron) && iron.getDisableDefaultOre()) {
mixinRawOreBlock = Blocks.DEEPSLATE.defaultBlockState();
mixinOreBlock = Blocks.DEEPSLATE.defaultBlockState();
}

return randomsource.nextFloat() < 0.02F ? mixinRawOreBlock : mixinOreBlock;
} else {
return oreveinifier$veintype.filler;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,7 @@

package com.ridanisaurus.emendatusenigmatica.datagen;

import com.google.common.base.Suppliers;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import com.ridanisaurus.emendatusenigmatica.api.EmendatusDataRegistry;
import com.ridanisaurus.emendatusenigmatica.blocks.BasicWaxedBlock;
import com.ridanisaurus.emendatusenigmatica.loader.parser.model.MaterialModel;
import com.ridanisaurus.emendatusenigmatica.registries.EERegistrar;
import com.ridanisaurus.emendatusenigmatica.registries.EETags;
Expand All @@ -37,20 +33,16 @@
import net.minecraft.data.*;
import net.minecraft.data.recipes.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.HoneycombItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;
import net.minecraftforge.registries.ForgeRegistries;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;

public class RecipesGen extends RecipeProvider {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,9 @@
import java.util.List;

public class EELoader {

public static final Logger LOADER_LOGGER = LogManager.getLogger(EELoader.class);
private final EmendatusDataRegistry dataRegistry;

private List<IEmendatusPlugin> plugins;
private final List<IEmendatusPlugin> plugins;

public EELoader() {
this.dataRegistry = new EmendatusDataRegistry();
Expand Down
Loading

0 comments on commit 0db4f33

Please sign in to comment.