Configurified the Meteor Ritual - Modpacks and users can edit all of the major properties of the meteor ritual, including what items need to be dropped onto the ritual as well as what you get in the ritual, radius, etc. The config will refresh if there is a version change unless you set "resyncOnVersionChange" to false.

This commit is contained in:
WayofTime 2016-09-09 12:28:23 -04:00
parent 63febfeb85
commit 4c79a4f2ff
8 changed files with 199 additions and 31 deletions

View file

@ -9,6 +9,7 @@ Version 2.1.0-59
- Fixed the sacrifice range of the altar.
- Fixed the Regeneration ritual so that it works on non-players
- Added Mimic entry to The Architect.
- Configurified the Meteor Ritual - Modpacks and users can edit all of the major properties of the meteor ritual, including what items need to be dropped onto the ritual as well as what you get in the ritual, radius, etc. The config will refresh if there is a version change unless you set "resyncOnVersionChange" to false.
------------------------------------------------------
Version 2.0.4-58

View file

@ -11,7 +11,12 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLInterModComms;
import net.minecraftforge.fml.common.event.FMLModIdMappingEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import WayofTime.bloodmagic.annot.Handler;
import WayofTime.bloodmagic.api.Constants;
@ -27,6 +32,7 @@ import WayofTime.bloodmagic.registry.ModBlocks;
import WayofTime.bloodmagic.registry.ModCompatibility;
import WayofTime.bloodmagic.registry.ModEntities;
import WayofTime.bloodmagic.registry.ModItems;
import WayofTime.bloodmagic.registry.ModMeteors;
import WayofTime.bloodmagic.registry.ModPotions;
import WayofTime.bloodmagic.registry.ModRecipes;
import WayofTime.bloodmagic.registry.ModRituals;
@ -121,6 +127,7 @@ public class BloodMagic
ModRecipes.init();
ModRituals.initRituals();
ModRituals.initImperfectRituals();
ModMeteors.init();
ModArmourTrackers.init();
ModCompatibility.loadCompat(ICompatibility.InitializationPhase.INIT);
NetworkRegistry.INSTANCE.registerGuiHandler(BloodMagic.instance, new GuiHandler());
@ -138,7 +145,8 @@ public class BloodMagic
}
@Mod.EventHandler
public void modMapping(FMLModIdMappingEvent event) {
public void modMapping(FMLModIdMappingEvent event)
{
ModCompatibility.loadCompat(ICompatibility.InitializationPhase.MAPPING);
}

View file

@ -1,21 +1,27 @@
package WayofTime.bloodmagic;
import WayofTime.bloodmagic.annot.Handler;
import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.BloodMagicAPI;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.util.Utils;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Getter;
import net.minecraft.block.Block;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.OreDictionary;
import java.io.File;
import java.util.*;
import WayofTime.bloodmagic.annot.Handler;
import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.BloodMagicAPI;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.registry.ModMeteors;
import WayofTime.bloodmagic.util.Utils;
@Handler
public class ConfigHandler
@ -159,8 +165,18 @@ public class ConfigHandler
public static void syncConfig()
{
boolean configVersionChanged = false;
String category;
category = "Version";
Property prop = config.get(category, "Config Version", Constants.Mod.VERSION);
if (!prop.getString().equals(Constants.Mod.VERSION))
{
configVersionChanged = true;
prop.setValue(Constants.Mod.VERSION);
}
category = "Item/Block Blacklisting";
config.addCustomCategoryComment(category, "Allows disabling of specific Blocks/Items.\nNote that using this may result in crashes. Use is not supported.");
config.setCategoryRequiresMcRestart(category, true);
@ -303,6 +319,22 @@ public class ConfigHandler
thaumcraftGogglesUpgrade = config.getBoolean("thaumcraftGogglesUpgrade", category + ".thaumcraft", true, "Allows the Living Helmet to be upgraded with Goggles of Revealing in an Anvil.");
ignoreCompressionSpamAddedByCompression = config.getBoolean("ignoreCompressionSpamAddedByCompression", category + ".compression", true, "Compression decided to add a storage recipe for every item and block in the game. This will make the Sigil of Compression ignore those recipes so your game will actually load in a decent amount of time.");
category = "Meteors";
config.addCustomCategoryComment(category, "Meteor settings");
String[] defaultMeteors = ModMeteors.getDefaultMeteors();
boolean resyncMeteorOnVersionChange = config.getBoolean("resyncOnVersionChange", category, true, "");
Property meteorsProp = config.get(category, "MeteorList", defaultMeteors);
meteorsProp.setComment("These are meteors. Huzzah!");
if (resyncMeteorOnVersionChange && configVersionChanged)
{
meteorsProp.set(defaultMeteors);
ModMeteors.meteors = defaultMeteors;
} else
{
ModMeteors.meteors = meteorsProp.getStringList();
}
config.save();
}

View file

@ -5,7 +5,11 @@ import java.util.List;
import java.util.Random;
import lombok.AllArgsConstructor;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import WayofTime.bloodmagic.util.Utils;
@ -14,13 +18,33 @@ import WayofTime.bloodmagic.util.Utils;
public class MeteorHolder
{
public static Random rand = new Random();
public ResourceLocation resourceKey;
public int metaKey = 0;
public List<MeteorComponent> components = new ArrayList<MeteorComponent>();
public float explosionStrength;
public int radius;
public float explosionStrength = 1;
public int radius = 1;
public int maxWeight = 1000;
public ItemStack getKeyStack()
{
Item item = Utils.getItem(resourceKey);
if (item != null)
{
return new ItemStack(item);
} else
{
Block block = Utils.getBlock(resourceKey);
if (block != null)
{
return new ItemStack(block);
}
}
return null;
}
public void generateMeteor(World world, BlockPos pos, IBlockState fillerBlock)
{
world.newExplosion(null, pos.getX(), pos.getY(), pos.getZ(), explosionStrength, true, true);

View file

@ -6,9 +6,11 @@ import java.util.Map;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import WayofTime.bloodmagic.api.ItemStackWrapper;
import WayofTime.bloodmagic.util.Utils;
public class MeteorRegistry
{
@ -25,7 +27,9 @@ public class MeteorRegistry
public static void registerMeteor(ItemStack stack, List<MeteorComponent> componentList, float explosionStrength, int radius, int maxWeight)
{
MeteorHolder holder = new MeteorHolder(componentList, explosionStrength, radius, maxWeight);
ResourceLocation resource = Utils.getResourceForItem(stack);
MeteorHolder holder = new MeteorHolder(resource, stack.getItemDamage(), componentList, explosionStrength, radius, maxWeight);
registerMeteor(stack, holder);
}

View file

@ -0,0 +1,89 @@
package WayofTime.bloodmagic.registry;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import WayofTime.bloodmagic.meteor.MeteorComponent;
import WayofTime.bloodmagic.meteor.MeteorHolder;
import WayofTime.bloodmagic.meteor.MeteorRegistry;
import WayofTime.bloodmagic.util.Utils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class ModMeteors
{
public static String[] meteors = new String[] {};
public static void init()
{
Gson gson = new GsonBuilder().create();
List<String> properStrings = new ArrayList<String>();
String currentString = "";
int leftParenths = 0;
int rightParenths = 0;
for (String str : meteors)
{
currentString += str;
for (char c : str.toCharArray())
{
if (c == '{')
{
leftParenths++;
} else if (c == '}')
{
rightParenths++;
}
}
if (leftParenths == rightParenths)
{
properStrings.add(currentString);
currentString = "";
leftParenths = 0;
rightParenths = 0;
}
}
for (String properString : properStrings)
{
MeteorHolder holder = gson.fromJson(properString, MeteorHolder.class);
if (holder != null)
{
MeteorRegistry.registerMeteor(holder.getKeyStack(), holder);
}
}
}
public static String[] getDefaultMeteors()
{
Gson gson = new GsonBuilder().setPrettyPrinting().create();
List<MeteorHolder> holders = new ArrayList<MeteorHolder>();
List<MeteorComponent> ironMeteorList = new ArrayList<MeteorComponent>();
ironMeteorList.add(new MeteorComponent(400, "oreIron"));
ironMeteorList.add(new MeteorComponent(200, "oreCopper"));
ironMeteorList.add(new MeteorComponent(140, "oreTin"));
ironMeteorList.add(new MeteorComponent(70, "oreSilver"));
ironMeteorList.add(new MeteorComponent(80, "oreLead"));
ironMeteorList.add(new MeteorComponent(30, "oreGold"));
ironMeteorList.add(new MeteorComponent(60, "oreLapis"));
ironMeteorList.add(new MeteorComponent(100, "oreRedstone"));
MeteorHolder ironMeteorHolder = new MeteorHolder(Utils.getResourceForItem(new ItemStack(Blocks.IRON_BLOCK)), 0, ironMeteorList, 15, 5, 1000);
holders.add(ironMeteorHolder);
String[] meteors = new String[holders.size()];
for (int i = 0; i < holders.size(); i++)
{
meteors[i] = gson.toJson(holders.get(i), MeteorHolder.class);
}
return meteors;
}
}

View file

@ -1,10 +1,6 @@
package WayofTime.bloodmagic.registry;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import WayofTime.bloodmagic.ConfigHandler;
import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.registry.HarvestRegistry;
@ -13,8 +9,6 @@ import WayofTime.bloodmagic.api.registry.RitualRegistry;
import WayofTime.bloodmagic.api.ritual.Ritual;
import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual;
import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid;
import WayofTime.bloodmagic.meteor.MeteorComponent;
import WayofTime.bloodmagic.meteor.MeteorRegistry;
import WayofTime.bloodmagic.ritual.RitualAltarBuilder;
import WayofTime.bloodmagic.ritual.RitualAnimalGrowth;
import WayofTime.bloodmagic.ritual.RitualArmourEvolve;
@ -155,18 +149,6 @@ public class ModRituals
RitualCrushing.registerCuttingFluid(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 250, 0.5);
RitualCrushing.registerCuttingFluid(ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE), 25, 0.05);
List<MeteorComponent> ironMeteorList = new ArrayList<MeteorComponent>();
ironMeteorList.add(new MeteorComponent(400, "oreIron"));
ironMeteorList.add(new MeteorComponent(200, "oreCopper"));
ironMeteorList.add(new MeteorComponent(140, "oreTin"));
ironMeteorList.add(new MeteorComponent(70, "oreSilver"));
ironMeteorList.add(new MeteorComponent(80, "oreLead"));
ironMeteorList.add(new MeteorComponent(30, "oreGold"));
ironMeteorList.add(new MeteorComponent(60, "oreLapis"));
ironMeteorList.add(new MeteorComponent(100, "oreRedstone"));
MeteorRegistry.registerMeteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5, 1000);
}
public static void initImperfectRituals()

View file

@ -25,12 +25,14 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
@ -65,6 +67,32 @@ import com.google.common.collect.Iterables;
public class Utils
{
public static Item getItem(ResourceLocation resource)
{
return Item.REGISTRY.getObject(resource);
}
public static Block getBlock(ResourceLocation resource)
{
return Block.REGISTRY.getObject(resource);
}
public static ResourceLocation getResourceForItem(ItemStack stack)
{
if (stack != null)
{
if (stack.getItem() instanceof ItemBlock)
{
return Block.REGISTRY.getNameForObject(((ItemBlock) stack.getItem()).getBlock());
} else
{
return Item.REGISTRY.getNameForObject(stack.getItem());
}
}
return null;
}
public static boolean canPlayerSeeDemonWill(EntityPlayer player)
{
ItemStack[] mainInventory = player.inventory.mainInventory;