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:
parent
d67ed054ff
commit
f8c734bc96
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package WayofTime.bloodmagic.apibutnotreally.incense;
|
||||
package WayofTime.bloodmagic.incense;
|
||||
|
||||
public enum EnumTranquilityType {
|
||||
PLANT(),
|
|
@ -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;
|
|
@ -1,4 +1,4 @@
|
|||
package WayofTime.bloodmagic.apibutnotreally.incense;
|
||||
package WayofTime.bloodmagic.incense;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
|
@ -1,4 +1,4 @@
|
|||
package WayofTime.bloodmagic.apibutnotreally.incense;
|
||||
package WayofTime.bloodmagic.incense;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package WayofTime.bloodmagic.apibutnotreally.incense;
|
||||
package WayofTime.bloodmagic.incense;
|
||||
|
||||
public class TranquilityStack {
|
||||
public final EnumTranquilityType type;
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue