diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java index a7447cd4..295007db 100644 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java @@ -172,7 +172,7 @@ public class ConfigHandler category = "Transposition Sigil Blacklist"; config.addCustomCategoryComment(category, "Block blacklisting"); - transpositionBlacklisting = config.getStringList("transpositionBlacklist", category, new String[] { "minecraft:bedrock" }, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta"); + transpositionBlacklisting = config.getStringList("transpositionBlacklist", category, new String[] { "minecraft:bedrock", "minecraft:mob_spawner" }, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta"); buildBlacklist(transpositionBlacklisting, transpositionBlacklist); category = "Well of Suffering Blacklist"; diff --git a/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java b/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java index 78e84f74..1323545c 100644 --- a/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java +++ b/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java @@ -32,6 +32,8 @@ public class BloodMagicAPI @Getter private static final List teleposerBlacklist = new ArrayList(); @Getter + private static final List transpositionBlacklist = new ArrayList(); + @Getter private static final Map entitySacrificeValues = new HashMap(); @Getter private static final ArrayList greenGroveBlacklist = new ArrayList(); @@ -148,6 +150,48 @@ public class BloodMagicAPI addToTeleposerBlacklist(block, 0); } + /** + * Used to add a {@link BlockStack} to the Transposition blacklist that cannot + * be changed via Configuration files. + * + * IMC: + * {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", ItemStack)} + * Example: + * {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", new ItemStack(Blocks.bedrock))} + * + * @param blockStack + * - The BlockStack to blacklist. + */ + public static void addToTranspositionBlacklist(BlockStack blockStack) + { + if (!transpositionBlacklist.contains(blockStack)) + transpositionBlacklist.add(blockStack); + } + + /** + * @see #addToTranspositionBlacklist(BlockStack) + * + * @param block + * - The block to blacklist + * @param meta + * - The meta of the block to blacklist + */ + public static void addToTranspositionBlacklist(Block block, int meta) + { + addToTranspositionBlacklist(new BlockStack(block, meta)); + } + + /** + * @see #addToTranspositionBlacklist(BlockStack) + * + * @param block + * - The block to blacklist + */ + public static void addToTranspositionBlacklist(Block block) + { + addToTranspositionBlacklist(block, 0); + } + /** * Used to set the sacrifice value of an Entity. The value provided is how * much LP will be gained when the entity is sacrificed at a Blood Altar. diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java index 8bfbd395..3f51d883 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java @@ -2,6 +2,8 @@ package WayofTime.bloodmagic.item.sigil; import java.util.List; +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -13,8 +15,10 @@ import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fml.common.registry.ForgeRegistries; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.ConfigHandler; @@ -54,7 +58,7 @@ public class ItemSigilTransposition extends ItemSigilBase if (tag.hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) && tag.hasKey(Constants.NBT.CONTAINED_BLOCK_META)) { - BlockStack blockStack = new BlockStack(Block.getBlockFromName(tag.getString(Constants.NBT.CONTAINED_BLOCK_NAME)), tag.getByte(Constants.NBT.CONTAINED_BLOCK_META)); + BlockStack blockStack = new BlockStack(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(tag.getString(Constants.NBT.CONTAINED_BLOCK_NAME))), tag.getByte(Constants.NBT.CONTAINED_BLOCK_META)); return super.getItemStackDisplayName(stack) + " (" + blockStack.getItemStack().getDisplayName() + ")"; } return super.getItemStackDisplayName(stack); @@ -69,9 +73,12 @@ public class ItemSigilTransposition extends ItemSigilBase if (!world.isRemote) { BlockStack rightClickedBlock = BlockStack.getStackFromPos(world, blockPos); + if (BloodMagicAPI.getTranspositionBlacklist().contains(rightClickedBlock)) + return EnumActionResult.FAIL; + if (!ConfigHandler.transpositionBlacklist.contains(rightClickedBlock) && player.isSneaking() && (!stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) || !stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_META))) { - if (rightClickedBlock.getBlock().getPlayerRelativeBlockHardness(state, player, world, blockPos) >= 0 && rightClickedBlock.getBlock().getBlockHardness(state, world, blockPos) >= 0) + if (rightClickedBlock.getState().getPlayerRelativeBlockHardness(player, world, blockPos) >= 0 && rightClickedBlock.getState().getBlockHardness(world, blockPos) >= 0) { int cost = getLpUsed(); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index f4a01d86..b4db0c7e 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -144,9 +144,13 @@ public class ModBlocks // testSpellBlock = registerBlock(new BlockTestSpellBlock()); BloodMagicAPI.addToTeleposerBlacklist(inputRoutingNode); + BloodMagicAPI.addToTranspositionBlacklist(inputRoutingNode); BloodMagicAPI.addToTeleposerBlacklist(outputRoutingNode); + BloodMagicAPI.addToTranspositionBlacklist(outputRoutingNode); BloodMagicAPI.addToTeleposerBlacklist(itemRoutingNode); + BloodMagicAPI.addToTranspositionBlacklist(itemRoutingNode); BloodMagicAPI.addToTeleposerBlacklist(demonCrystal); + BloodMagicAPI.addToTranspositionBlacklist(demonCrystal); initTiles(); } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java index 3a5452fe..ca3ef747 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java @@ -27,6 +27,15 @@ public class IMCHandler } } + if (message.key.equals("transpositionBlacklist") && message.isItemStackMessage()) + { + ItemStack stack = message.getItemStackValue(); + if (stack.getItem() instanceof ItemBlock) { + Block block = Block.getBlockFromItem(stack.getItem()); + BloodMagicAPI.addToTranspositionBlacklist(block, stack.getItemDamage()); + } + } + if (message.key.equals("sacrificeValue") && message.isStringMessage()) { String[] splitInfo = message.getStringValue().split(";");