Implemented new Tranquility value API

For quick compat, mods can now register a static state-based tranquility
value for their blocks. More
This commit is contained in:
Nicholas Ignoffo 2018-02-06 21:24:40 -08:00
parent d67ed054ff
commit f8c734bc96
14 changed files with 125 additions and 143 deletions

View file

@ -18,7 +18,8 @@ public interface IBloodMagicAPI {
@Nonnull
IBloodMagicRecipeRegistrar getRecipeRegistrar();
void setSacrificialValue(@Nonnull ResourceLocation entityId, int value);
@Nonnull
IBloodMagicValueManager getValueManager();
void registerAltarComponent(@Nonnull IBlockState state, @Nonnull String componentType);
}

View file

@ -0,0 +1,14 @@
package WayofTime.bloodmagic.api;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
public interface IBloodMagicValueManager {
void setSacrificialValue(@Nonnull ResourceLocation entityId, @Nonnegative int value);
void setTranquility(@Nonnull IBlockState state, @Nonnull String tranquilityType, double value);
}

View file

@ -18,13 +18,13 @@ public class BloodMagicAPI implements IBloodMagicAPI {
private final BloodMagicBlacklist blacklist;
private final BloodMagicRecipeRegistrar recipeRegistrar;
private final Map<ResourceLocation, Integer> sacrificialValues;
private final BloodMagicValueManager valueManager;
private final Multimap<EnumAltarComponent, IBlockState> altarComponents;
public BloodMagicAPI() {
this.blacklist = new BloodMagicBlacklist();
this.recipeRegistrar = new BloodMagicRecipeRegistrar();
this.sacrificialValues = Maps.newHashMap();
this.valueManager = new BloodMagicValueManager();
this.altarComponents = ArrayListMultimap.create();
}
@ -40,9 +40,10 @@ public class BloodMagicAPI implements IBloodMagicAPI {
return recipeRegistrar;
}
@Nonnull
@Override
public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) {
sacrificialValues.put(entityId, value);
public BloodMagicValueManager getValueManager() {
return valueManager;
}
@Override
@ -58,11 +59,6 @@ public class BloodMagicAPI implements IBloodMagicAPI {
altarComponents.put(component, state);
}
@Nonnull
public Map<ResourceLocation, Integer> getSacrificialValues() {
return ImmutableMap.copyOf(sacrificialValues);
}
@Nonnull
public List<IBlockState> getComponentStates(EnumAltarComponent component) {
return (List<IBlockState>) altarComponents.get(component);

View file

@ -6,6 +6,8 @@ import WayofTime.bloodmagic.apibutnotreally.altar.EnumAltarComponent;
import WayofTime.bloodmagic.api.BloodMagicPlugin;
import WayofTime.bloodmagic.api.IBloodMagicAPI;
import WayofTime.bloodmagic.api.IBloodMagicPlugin;
import WayofTime.bloodmagic.incense.EnumTranquilityType;
import WayofTime.bloodmagic.incense.TranquilityStack;
import WayofTime.bloodmagic.block.BlockBloodRune;
import WayofTime.bloodmagic.block.BlockDecorative;
import WayofTime.bloodmagic.block.enums.EnumBloodRune;
@ -25,7 +27,8 @@ import net.minecraftforge.fml.common.registry.ForgeRegistries;
public class BloodMagicCorePlugin implements IBloodMagicPlugin {
@Override
public void register(IBloodMagicAPI api) {
public void register(IBloodMagicAPI apiInterface) {
BloodMagicAPI api = (BloodMagicAPI) apiInterface;
// Add forced blacklistings
api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE);
api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE);
@ -42,8 +45,22 @@ public class BloodMagicCorePlugin implements IBloodMagicPlugin {
api.getBlacklist().addWellOfSuffering(new ResourceLocation("armor_stand"));
api.getBlacklist().addWellOfSuffering(new ResourceLocation(BloodMagic.MODID, "sentient_specter"));
api.setSacrificialValue(new ResourceLocation("armor_stand"), 0);
api.setSacrificialValue(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), 0);
api.getValueManager().setSacrificialValue(new ResourceLocation("armor_stand"), 0);
api.getValueManager().setSacrificialValue(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), 0);
api.getValueManager().setTranquility(Blocks.LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D));
api.getValueManager().setTranquility(Blocks.FLOWING_LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D));
api.getValueManager().setTranquility(Blocks.WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D));
api.getValueManager().setTranquility(Blocks.FLOWING_WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D));
api.getValueManager().setTranquility(RegistrarBloodMagicBlocks.LIFE_ESSENCE, new TranquilityStack(EnumTranquilityType.WATER, 1.5D));
api.getValueManager().setTranquility(Blocks.NETHERRACK, new TranquilityStack(EnumTranquilityType.FIRE, 0.5D));
api.getValueManager().setTranquility(Blocks.DIRT, new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25D));
api.getValueManager().setTranquility(Blocks.FARMLAND, new TranquilityStack(EnumTranquilityType.EARTHEN, 1.0D));
api.getValueManager().setTranquility(Blocks.POTATOES, new TranquilityStack(EnumTranquilityType.CROP, 1.0D));
api.getValueManager().setTranquility(Blocks.CARROTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D));
api.getValueManager().setTranquility(Blocks.WHEAT, new TranquilityStack(EnumTranquilityType.CROP, 1.0D));
api.getValueManager().setTranquility(Blocks.NETHER_WART, new TranquilityStack(EnumTranquilityType.CROP, 1.0D));
api.getValueManager().setTranquility(Blocks.BEETROOTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D));
handleConfigValues(api);
@ -62,9 +79,9 @@ public class BloodMagicCorePlugin implements IBloodMagicPlugin {
for (EnumBloodRune runeType : EnumBloodRune.values())
api.registerAltarComponent(bloodRune.getDefaultState().withProperty(bloodRune.getProperty(), runeType), EnumAltarComponent.BLOODRUNE.name());
RegistrarBloodMagicRecipes.registerAltarRecipes(((BloodMagicAPI) api).getRecipeRegistrar());
RegistrarBloodMagicRecipes.registerAlchemyTableRecipes(((BloodMagicAPI) api).getRecipeRegistrar());
RegistrarBloodMagicRecipes.registerTartaricForgeRecipes(((BloodMagicAPI) api).getRecipeRegistrar());
RegistrarBloodMagicRecipes.registerAltarRecipes(api.getRecipeRegistrar());
RegistrarBloodMagicRecipes.registerAlchemyTableRecipes(api.getRecipeRegistrar());
RegistrarBloodMagicRecipes.registerTartaricForgeRecipes(api.getRecipeRegistrar());
}
private static void handleConfigValues(IBloodMagicAPI api) {
@ -73,7 +90,7 @@ public class BloodMagicCorePlugin implements IBloodMagicPlugin {
if (split.length != 2) // Not valid format
continue;
api.setSacrificialValue(new ResourceLocation(split[0]), Integer.parseInt(split[1]));
api.getValueManager().setSacrificialValue(new ResourceLocation(split[0]), Integer.parseInt(split[1]));
}
for (String value : ConfigHandler.blacklist.teleposer) {

View file

@ -0,0 +1,56 @@
package WayofTime.bloodmagic.api.impl;
import WayofTime.bloodmagic.api.IBloodMagicValueManager;
import WayofTime.bloodmagic.incense.EnumTranquilityType;
import WayofTime.bloodmagic.incense.TranquilityStack;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
import java.util.Map;
public class BloodMagicValueManager implements IBloodMagicValueManager {
private final Map<ResourceLocation, Integer> sacrificial;
private final Map<IBlockState, TranquilityStack> tranquility;
public BloodMagicValueManager() {
this.sacrificial = Maps.newHashMap();
this.tranquility = Maps.newHashMap();
}
@Override
public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) {
sacrificial.put(entityId, value);
}
@Override
public void setTranquility(@Nonnull IBlockState state, @Nonnull String tranquilityType, double value) {
EnumTranquilityType tranquility = null;
for (EnumTranquilityType type : EnumTranquilityType.values()) {
if (type.name().equalsIgnoreCase(tranquilityType)) {
tranquility = type;
break;
}
}
if (tranquility != null)
this.tranquility.put(state, new TranquilityStack(tranquility, value));
}
public void setTranquility(Block block, TranquilityStack tranquilityStack) {
for (IBlockState state : block.getBlockState().getValidStates())
tranquility.put(state, tranquilityStack);
}
public Map<ResourceLocation, Integer> getSacrificial() {
return ImmutableMap.copyOf(sacrificial);
}
public Map<IBlockState, TranquilityStack> getTranquility() {
return ImmutableMap.copyOf(tranquility);
}
}

View file

@ -1,7 +1,7 @@
package WayofTime.bloodmagic.block;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.apibutnotreally.incense.IIncensePath;
import WayofTime.bloodmagic.incense.IIncensePath;
import WayofTime.bloodmagic.block.base.BlockEnum;
import WayofTime.bloodmagic.block.enums.EnumPath;
import WayofTime.bloodmagic.util.helper.TextHelper;

View file

@ -1,4 +1,4 @@
package WayofTime.bloodmagic.apibutnotreally.incense;
package WayofTime.bloodmagic.incense;
public enum EnumTranquilityType {
PLANT(),

View file

@ -1,4 +1,4 @@
package WayofTime.bloodmagic.apibutnotreally.incense;
package WayofTime.bloodmagic.incense;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;

View file

@ -1,4 +1,4 @@
package WayofTime.bloodmagic.apibutnotreally.incense;
package WayofTime.bloodmagic.incense;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;

View file

@ -1,4 +1,4 @@
package WayofTime.bloodmagic.apibutnotreally.incense;
package WayofTime.bloodmagic.incense;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;

View file

@ -1,107 +0,0 @@
package WayofTime.bloodmagic.incense;
import WayofTime.bloodmagic.apibutnotreally.incense.EnumTranquilityType;
import WayofTime.bloodmagic.apibutnotreally.incense.ITranquilityHandler;
import WayofTime.bloodmagic.apibutnotreally.incense.TranquilityStack;
import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks;
import net.minecraft.block.*;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class TranquilityHandlers {
public static class Plant implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block instanceof BlockLeaves) {
return new TranquilityStack(EnumTranquilityType.PLANT, 1);
}
return null;
}
}
public static class Lava implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block == Blocks.LAVA || block == Blocks.FLOWING_LAVA) {
return new TranquilityStack(EnumTranquilityType.LAVA, 1.2);
}
return null;
}
}
public static class Fire implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block instanceof BlockFire) {
return new TranquilityStack(EnumTranquilityType.FIRE, 1);
}
if (block == Blocks.NETHERRACK) {
return new TranquilityStack(EnumTranquilityType.FIRE, 0.5);
}
return null;
}
}
public static class Earth implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block == Blocks.DIRT) {
return new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25);
}
if (block instanceof BlockGrass) {
return new TranquilityStack(EnumTranquilityType.EARTHEN, 0.5);
}
if (block == Blocks.FARMLAND) {
return new TranquilityStack(EnumTranquilityType.EARTHEN, 1);
}
return null;
}
}
public static class Crop implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block == Blocks.POTATOES || block == Blocks.CARROTS || block == Blocks.WHEAT || block == Blocks.NETHER_WART || block == Blocks.BEETROOTS) {
return new TranquilityStack(EnumTranquilityType.CROP, 1);
}
return null;
}
}
public static class Tree implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block instanceof BlockLog) {
return new TranquilityStack(EnumTranquilityType.TREE, 1);
}
return null;
}
}
public static class Water implements ITranquilityHandler {
@Override
public TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) {
if (block == Blocks.WATER || block == Blocks.FLOWING_WATER) {
return new TranquilityStack(EnumTranquilityType.WATER, 1);
}
if (block == RegistrarBloodMagicBlocks.LIFE_ESSENCE) {
return new TranquilityStack(EnumTranquilityType.WATER, 1.5);
}
return null;
}
}
}

View file

@ -1,4 +1,4 @@
package WayofTime.bloodmagic.apibutnotreally.incense;
package WayofTime.bloodmagic.incense;
public class TranquilityStack {
public final EnumTranquilityType type;

View file

@ -1,16 +1,21 @@
package WayofTime.bloodmagic.registry;
import WayofTime.bloodmagic.apibutnotreally.incense.IncenseTranquilityRegistry;
import WayofTime.bloodmagic.incense.TranquilityHandlers;
import WayofTime.bloodmagic.api.impl.BloodMagicAPI;
import WayofTime.bloodmagic.incense.EnumTranquilityType;
import WayofTime.bloodmagic.incense.IncenseTranquilityRegistry;
import WayofTime.bloodmagic.incense.TranquilityStack;
import net.minecraft.block.BlockFire;
import net.minecraft.block.BlockGrass;
import net.minecraft.block.BlockLeaves;
import net.minecraft.block.BlockLog;
public class ModTranquilityHandlers {
public static void init() {
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Plant());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Crop());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Water());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Earth());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Fire());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Lava());
IncenseTranquilityRegistry.registerTranquilityHandler(new TranquilityHandlers.Tree());
IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockLeaves ? new TranquilityStack(EnumTranquilityType.PLANT, 1.0D) : null);
IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockFire ? new TranquilityStack(EnumTranquilityType.FIRE, 1.0D) : null);
IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockGrass ? new TranquilityStack(EnumTranquilityType.EARTHEN, 0.5D) : null);
IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockLog ? new TranquilityStack(EnumTranquilityType.TREE, 1.0D) : null);
IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> BloodMagicAPI.INSTANCE.getValueManager().getTranquility().get(state));
}
}

View file

@ -1,9 +1,9 @@
package WayofTime.bloodmagic.tile;
import WayofTime.bloodmagic.apibutnotreally.incense.EnumTranquilityType;
import WayofTime.bloodmagic.apibutnotreally.incense.IIncensePath;
import WayofTime.bloodmagic.apibutnotreally.incense.IncenseTranquilityRegistry;
import WayofTime.bloodmagic.apibutnotreally.incense.TranquilityStack;
import WayofTime.bloodmagic.incense.EnumTranquilityType;
import WayofTime.bloodmagic.incense.IIncensePath;
import WayofTime.bloodmagic.incense.IncenseTranquilityRegistry;
import WayofTime.bloodmagic.incense.TranquilityStack;
import WayofTime.bloodmagic.apibutnotreally.ritual.AreaDescriptor;
import WayofTime.bloodmagic.apibutnotreally.util.helper.PlayerSacrificeHelper;
import WayofTime.bloodmagic.incense.IncenseAltarHandler;