From fca3a60a1e8b58f67f9eb3b9b65b0fa1c0a9bcbc Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 18:24:12 -0700 Subject: [PATCH 1/7] Allow any instanceof BlockBeacon --- .../common/bloodAltarUpgrade/UpgradedAltars.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java index 23d0845b..3d89811c 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.block.BlockBeacon; import net.minecraft.init.Blocks; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.ModBlocks; @@ -125,11 +126,16 @@ public class UpgradedAltars { return false; } - } else - { + } else { Block block = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); int metadata = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + if (ac.getBlock() == Blocks.beacon) { + + if (block instanceof BlockBeacon) + return true; + } + if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { return false; From 27ac16b5d29d484c61cefab3f1f7ad4584234102 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 19:23:25 -0700 Subject: [PATCH 2/7] Allow disabling of Weak Rituals --- .../WayofTime/alchemicalWizardry/AlchemicalWizardry.java | 5 +++++ .../alchemicalWizardry/BloodMagicConfiguration.java | 5 +++++ .../common/block/ImperfectRitualStone.java | 9 ++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 0b41b2bb..60d77989 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -387,6 +387,11 @@ public class AlchemicalWizardry public static boolean ritualDisabledPhantomHands; public static boolean ritualDisabledSphereIsland; + public static boolean ritualWeakDisabledNight; + public static boolean ritualWeakDisabledResistance; + public static boolean ritualWeakDisabledThunderstorm; + public static boolean ritualWeakDisabledZombie; + public static boolean displayRitualAnimation; public static boolean potionDisableRegen; diff --git a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index b76359ff..1ecde717 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -145,6 +145,11 @@ public class BloodMagicConfiguration AlchemicalWizardry.ritualDisabledPhantomHands = config.get("Ritual Blacklist", "Orchestra of the Phantom Hands", false).getBoolean(false); AlchemicalWizardry.ritualDisabledSphereIsland = config.get("Ritual Blacklist", "Birth of the Bastion", false).getBoolean(false); + AlchemicalWizardry.ritualWeakDisabledNight = config.get("Ritual Blacklist.Weak", "Night", false).getBoolean(false); + AlchemicalWizardry.ritualWeakDisabledResistance = config.get("Ritual Blacklist.Weak", "Resistance", false).getBoolean(false); + AlchemicalWizardry.ritualWeakDisabledThunderstorm = config.get("Ritual Blacklist.Weak", "Thunderstorm", false).getBoolean(false); + AlchemicalWizardry.ritualWeakDisabledZombie = config.get("Ritual Blacklist.Weak", "Zombie", false).getBoolean(false); + AlchemicalWizardry.potionDisableRegen = config.get("Alchemy Potion Blacklist", "Regeneration", false).getBoolean(false); AlchemicalWizardry.potionDisableNightVision = config.get("Alchemy Potion Blacklist", "Night Vision", false).getBoolean(false); AlchemicalWizardry.potionDisableFireResistance = config.get("Alchemy Potion Blacklist", "Fire Resistance", false).getBoolean(false); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java index cde800fc..debfd013 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java @@ -44,7 +44,7 @@ public class ImperfectRitualStone extends Block { Block block = world.getBlock(x, y + 1, z); - if (block == Blocks.water) + if (block == Blocks.water && !AlchemicalWizardry.ritualWeakDisabledThunderstorm) { if (!player.capabilities.isCreativeMode && !world.isRemote) { @@ -67,8 +67,7 @@ public class ImperfectRitualStone extends Block world.getWorldInfo().setThunderTime(0); world.getWorldInfo().setThundering(true); return true; - } else if (block == Blocks.coal_block) - { + } else if (block == Blocks.coal_block && !AlchemicalWizardry.ritualWeakDisabledZombie) { if (!player.capabilities.isCreativeMode && !world.isRemote) { EnergyItems.drainPlayerNetwork(player, 5000); @@ -87,7 +86,7 @@ public class ImperfectRitualStone extends Block } return true; - } else if (block == Blocks.lapis_block) + } else if (block == Blocks.lapis_block && !AlchemicalWizardry.ritualWeakDisabledNight) { if (!player.capabilities.isCreativeMode && !world.isRemote) { @@ -99,7 +98,7 @@ public class ImperfectRitualStone extends Block world.addWeatherEffect(new EntityLightningBolt(world, x, y + 2, z)); world.setWorldTime((world.getWorldTime() / 24000) * 24000 + 13800); } - } else if (block == Blocks.bedrock) + } else if (block == Blocks.bedrock && !AlchemicalWizardry.ritualWeakDisabledResistance) { if (!player.capabilities.isCreativeMode && !world.isRemote) { From bd4b2d2c521afd1222f619bc40f7831afa91433c Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 19:40:47 -0700 Subject: [PATCH 3/7] Fix z-fighting of blood in altar when there is none --- .../common/renderer/block/TEAltarRenderer.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java index 054e1201..0f706f6f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java @@ -36,11 +36,14 @@ public class TEAltarRenderer extends TileEntitySpecialRenderer @Override public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) { - modelBloodAltar.renderBloodAltar((TEAltar) tileEntity, d0, d1, d2); - modelBloodAltar.renderBloodLevel((TEAltar) tileEntity, d0, d1, d2); - if (tileEntity instanceof TEAltar) { + + modelBloodAltar.renderBloodAltar((TEAltar) tileEntity, d0, d1, d2); + + if (((TEAltar)tileEntity).getCurrentBlood() > 0) + modelBloodAltar.renderBloodLevel((TEAltar) tileEntity, d0, d1, d2); + TEAltar tileAltar = (TEAltar) tileEntity; GL11.glPushMatrix(); From 4a8651836624ca4eaea1da4d66daaa9b434d2241 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 19:45:46 -0700 Subject: [PATCH 4/7] Should fix getting free iron buckets from non-iron buckets --- .../alchemicalWizardry/common/LifeBucketHandler.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java index 3552f251..773437d5 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/LifeBucketHandler.java @@ -5,6 +5,7 @@ import WayofTime.alchemicalWizardry.ModItems; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -15,12 +16,13 @@ public class LifeBucketHandler @SubscribeEvent public void onBucketFill(FillBucketEvent event) { + if (event.current.getItem() != Items.bucket) + return; + ItemStack result = fillCustomBucket(event.world, event.target); if (result == null) - { return; - } event.result = result; event.setResult(Result.ALLOW); From 250debb604558a1041ba211609b9909ea96971f1 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 20:38:01 -0700 Subject: [PATCH 5/7] Drastically improve the Teleposer Blacklist It now functions correctly. Only downside to this is that currently using the wildcard value of `*` does not work. Need to figure out how to cleanly do that. --- .../BloodMagicConfiguration.java | 40 +++++++++ .../alchemicalWizardry/api/BlockStack.java | 47 ++++++++++ .../common/AlchemicalWizardryEventHooks.java | 89 ++++++++++++------- 3 files changed, 143 insertions(+), 33 deletions(-) create mode 100644 src/main/java/WayofTime/alchemicalWizardry/api/BlockStack.java diff --git a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index 1ecde717..346b8503 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -6,6 +6,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; +import WayofTime.alchemicalWizardry.api.BlockStack; +import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.Block; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraftforge.common.config.Configuration; @@ -18,6 +22,7 @@ import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour; import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; /** * Created with IntelliJ IDEA. @@ -178,6 +183,7 @@ public class BloodMagicConfiguration AlchemicalWizardry.potionDisableDeafness = config.get("Alchemy Potion Blacklist", "Deafness", false).getBoolean(false); teleposerBlacklist = config.get("Teleposer Blacklist", "Blacklist", blacklist, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is: \nmodid:blockname:meta").getStringList(); + buildTeleposerBlacklist(); String tempDemonConfigs = "Demon Configs"; TEDemonPortal.buildingGridDelay = config.get(tempDemonConfigs, "Building Grid Delay", 25).getInt(); @@ -296,4 +302,38 @@ public class BloodMagicConfiguration Rituals.ritualMap.remove(ritualID); Rituals.keyList.remove(ritualID); } + + private static void buildTeleposerBlacklist() { + for (String blockSet : BloodMagicConfiguration.teleposerBlacklist) { + String[] blockData = blockSet.split(":"); + + Block block = GameRegistry.findBlock(blockData[0], blockData[1]); + int meta = 0; + + // If the block follows full syntax: modid:blockname:meta + if (blockData.length == 3) { + // Check if it's an int, if so, parse it. If not, set meta to 0 to avoid crashing. + if (isInteger(blockData[2])) + meta = Integer.parseInt(blockData[2]); + else if (blockData[2].equals("*")) + meta = OreDictionary.WILDCARD_VALUE; + else + meta = 0; + } + + AlchemicalWizardryEventHooks.teleposerBlacklist.add(new BlockStack(block, meta)); + } + } + + private static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch(NumberFormatException e) { + return false; + } catch(NullPointerException e) { + return false; + } + // only got here if we didn't return false + return true; + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/BlockStack.java b/src/main/java/WayofTime/alchemicalWizardry/api/BlockStack.java new file mode 100644 index 00000000..774b3d68 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/BlockStack.java @@ -0,0 +1,47 @@ +package WayofTime.alchemicalWizardry.api; + +import cpw.mods.fml.common.registry.GameData; +import net.minecraft.block.Block; + +/** + * A Block with a set metadata. Similar to an ItemStack. + */ +public class BlockStack { + + private Block block; + private int meta; + + public BlockStack(Block block, int meta) { + this.block = block; + this.meta = meta; + } + + public BlockStack(Block block) { + this(block, 0); + } + + public Block getBlock() { + return block; + } + + public int getMeta() { + return meta; + } + + @Override + public String toString() { + return GameData.getBlockRegistry().getNameForObject(block) + ":" + meta; + } + + @Override + public boolean equals(Object obj) { + BlockStack blockStack = (BlockStack) obj; + + return blockStack.block == this.getBlock() && blockStack.meta == this.getMeta(); + } + + @Override + public int hashCode() { + return super.hashCode(); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index 10b04848..41abca77 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import java.util.Random; +import WayofTime.alchemicalWizardry.api.BlockStack; import WayofTime.alchemicalWizardry.common.achievements.ModAchievements; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.IHoardDemon; import net.minecraft.block.Block; @@ -68,6 +69,7 @@ public class AlchemicalWizardryEventHooks public static Map> respawnMap = new HashMap(); public static Map> forceSpawnMap = new HashMap(); + public static ArrayList teleposerBlacklist = new ArrayList(); public static Random rand = new Random(); @@ -771,41 +773,62 @@ public class AlchemicalWizardryEventHooks } } - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onTelepose(TeleposeEvent event) { - for (int i = 0; i < BloodMagicConfiguration.teleposerBlacklist.length; i++) { - String[] blockData = BloodMagicConfiguration.teleposerBlacklist[i].split(":"); +// @SubscribeEvent(priority = EventPriority.LOWEST) +// public void onTelepose(TeleposeEvent event) { +// +// AlchemicalWizardry.logger.info(event.initialBlock + ":" + event.initialMetadata); +// AlchemicalWizardry.logger.info(event.finalBlock + ":" + event.finalMetadata); +// +// for (int i = 0; i < BloodMagicConfiguration.teleposerBlacklist.length; i++) { +// String[] blockData = BloodMagicConfiguration.teleposerBlacklist[i].split(":"); +// +// // If the block follows full syntax: modid:blockname:meta +// if (blockData.length == 3) { +// +// Block block = GameRegistry.findBlock(blockData[0], blockData[1]); +// int meta; +// +// // Check if it's an int, if so, parse it. If not, set meta to 0 to avoid crashing. +// if (isInteger(blockData[2])) +// meta = Integer.parseInt(blockData[2]); +// else if (blockData[2].equals("*")) +// meta = OreDictionary.WILDCARD_VALUE; +// else +// meta = 0; +// +// AlchemicalWizardry.logger.info(block + ":" + meta); +// +// if (block != null) { +// if ((block == event.initialBlock || block == event.finalBlock) && (meta == event.initialMetadata || meta == event.finalMetadata || meta == OreDictionary.WILDCARD_VALUE)) { +// event.setCanceled(true); +// return; +// } +// } +// +// // If the block uses shorthand syntax: modid:blockname +// } else if (blockData.length == 2) { +// +// Block block = GameRegistry.findBlock(blockData[0], blockData[1]); +// int meta = 0; +// +// if (block != null) { +// if ((block == event.initialBlock && (meta == event.initialMetadata || meta == OreDictionary.WILDCARD_VALUE)) || (block == event.finalBlock && (meta == event.finalMetadata || meta == OreDictionary.WILDCARD_VALUE))) { +// event.setCanceled(true); +// return; +// } +// } +// } +// } +// } - // If the block follows full syntax: modid:blockname:meta - if (blockData.length == 3) { + @SubscribeEvent + public void onTelepose(TeleposeEvent event) { + BlockStack initialBlock = new BlockStack(event.initialBlock, event.initialMetadata); + BlockStack finalBlock = new BlockStack(event.finalBlock, event.finalMetadata); - Block block = GameRegistry.findBlock(blockData[0], blockData[1]); - int meta; - - // Check if it's an int, if so, parse it. If not, set meta to 0 to avoid crashing. - if (blockData[2].matches("-?\\d+")) - meta = Integer.parseInt(blockData[2]); - else if (blockData[2].equals("*")) - meta = OreDictionary.WILDCARD_VALUE; - else - meta = 0; - - if (block != null) - if (( block == event.initialBlock || block == event.finalBlock) && (meta == event.initialMetadata || meta == event.finalMetadata || meta == OreDictionary.WILDCARD_VALUE)) - event.setCanceled(true); - - // If the block uses shorthand syntax: modid:blockname - } else if (blockData.length == 2) { - - Block block = GameRegistry.findBlock(blockData[0], blockData[1]); - int meta = 0; - - if (block != null) - if (( block == event.initialBlock || block == event.finalBlock) && (meta == event.initialMetadata || meta == event.finalMetadata || meta == OreDictionary.WILDCARD_VALUE)) - event.setCanceled(true); - } - } - } + if (teleposerBlacklist.contains(initialBlock) || teleposerBlacklist.contains(finalBlock)) + event.setCanceled(true); + } @SubscribeEvent public void onEntityDeath(LivingDeathEvent event) From 83b26eb033d64e8faba4740b313fa4d79d7395a7 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 22:08:51 -0700 Subject: [PATCH 6/7] Fix my breakage of the altar checking --- .../common/bloodAltarUpgrade/UpgradedAltars.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java index 3d89811c..5c4ec8b9 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java @@ -130,15 +130,10 @@ public class UpgradedAltars Block block = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); int metadata = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); - if (ac.getBlock() == Blocks.beacon) { - - if (block instanceof BlockBeacon) - return true; - } - if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - return false; + if (!(ac.getBlock() == Blocks.beacon && block instanceof BlockBeacon)) + return false; } } } From a91d3500370246babddd8a319e1de5815af45247 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 6 Oct 2015 23:04:39 -0700 Subject: [PATCH 7/7] Altar now accepts Chisel variants of given blocks Will require a re-setup of the workspace (`gradlew [eclipse|idea]`) in order to download the Chisel API. This launches just fine without Chisel installed. --- build.gradle | 5 ++ build.properties | 7 ++- .../AlchemicalWizardry.java | 2 + .../bloodAltarUpgrade/CompatChecks.java | 26 ++++++++ .../bloodAltarUpgrade/UpgradedAltars.java | 61 ++++++++++++++++--- 5 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/CompatChecks.java diff --git a/build.gradle b/build.gradle index 5123f7e6..b41d8d26 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,10 @@ repositories { maven { name 'TehNut Repo' url 'http://tehnut.info/maven/' + } + maven { + name 'tterrag Repo' + url 'http://maven.tterrag.com/' } ivy { name "MineTweaker3" @@ -57,6 +61,7 @@ dependencies { compile name: 'MineTweaker3', version: config.minetweaker_version, ext: 'jar' compile "codechicken:ForgeMultipart:1.7.10-1.1.0.314:dev" compile "info.amerifrance.guideapi:Guide-API:" + config.mc_version + "-" + config.guideapi_version + ":deobf" + compile "team.chisel:Chisel:" + config.chisel_version + ":api" } minecraft { diff --git a/build.properties b/build.properties index 11cb5e94..106c18b3 100644 --- a/build.properties +++ b/build.properties @@ -1,14 +1,15 @@ # -#Wed Aug 12 17:14:26 EDT 2015 +#Tue Oct 06 22:55:47 PDT 2015 mod_name=BloodMagic forge_version=10.13.4.1492-1.7.10 ccc_version=1.0.7.47 cclib_version=1.1.3.138 nei_version=1.0.5.111 //=Dependency Information -guideapi_version=1.0.1-20 package_group=com.wayoftime.bloodmagic +guideapi_version=1.0.1-20 mod_version=1.3.3 minetweaker_version=Dev-1.7.10-3.0.9B -build_number=14 +chisel_version=2.9.2.8 mc_version=1.7.10 +build_number=15 diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 60d77989..a15b8c29 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -424,6 +424,7 @@ public class AlchemicalWizardry public static boolean isThaumcraftLoaded; public static boolean isForestryLoaded; public static boolean isBotaniaLoaded; + public static boolean isChiselLoaded; public static boolean isFMPLoaded; public static boolean isPneumaticCraftLoaded; @@ -1262,6 +1263,7 @@ public class AlchemicalWizardry isBotaniaLoaded = Loader.isModLoaded("Botania"); isPneumaticCraftLoaded = Loader.isModLoaded("PneumaticCraft"); isFMPLoaded = Loader.isModLoaded("ForgeMultipart"); + isChiselLoaded = Loader.isModLoaded("chisel"); BloodMagicConfiguration.loadBlacklist(); BloodMagicConfiguration.blacklistRituals(); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/CompatChecks.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/CompatChecks.java new file mode 100644 index 00000000..d15b3fc7 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/CompatChecks.java @@ -0,0 +1,26 @@ +package WayofTime.alchemicalWizardry.common.bloodAltarUpgrade; + +import WayofTime.alchemicalWizardry.api.BlockStack; +import com.cricketcraft.chisel.api.carving.CarvingUtils; +import com.cricketcraft.chisel.api.carving.ICarvingGroup; +import com.google.common.base.Strings; + +public class CompatChecks { + + public static boolean checkChiselBlock(BlockStack blockStack, String groupName) { + if (blockStack.getBlock() == null) + return false; + + ICarvingGroup group = CarvingUtils.getChiselRegistry().getGroup(blockStack.getBlock(), blockStack.getMeta()); + if (group != null) { + String check = CarvingUtils.getChiselRegistry().getGroup(blockStack.getBlock(), blockStack.getMeta()).getName(); + + if (Strings.isNullOrEmpty(check)) + return false; + + return check.equals(groupName); + } + + return false; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java index 5c4ec8b9..c36ca335 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java @@ -3,6 +3,8 @@ package WayofTime.alchemicalWizardry.common.bloodAltarUpgrade; import java.util.ArrayList; import java.util.List; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.BlockStack; import net.minecraft.block.Block; import net.minecraft.block.BlockBeacon; import net.minecraft.init.Blocks; @@ -46,10 +48,12 @@ public class UpgradedAltars if (ac.isBloodRune()) { Block testBlock = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + int testMeta = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); if (!(testBlock instanceof BloodRune)) { - return false; + if (!checkRuneSpecials(ac, new BlockStack(testBlock, testMeta))) + return false; } } else { @@ -58,7 +62,8 @@ public class UpgradedAltars if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - return false; + if (!checkSpecials(ac, new BlockStack(block, metadata))) + return false; } } } @@ -71,10 +76,12 @@ public class UpgradedAltars if (ac.isBloodRune()) { Block testBlock = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + int testMeta = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); if (!(testBlock instanceof BloodRune)) { - return false; + if (!checkRuneSpecials(ac, new BlockStack(testBlock, testMeta))) + return false; } } else { @@ -83,7 +90,8 @@ public class UpgradedAltars if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - return false; + if (!checkSpecials(ac, new BlockStack(block, metadata))) + return false; } } } @@ -96,10 +104,12 @@ public class UpgradedAltars if (ac.isBloodRune()) { Block testBlock = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + int testMeta = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); if (!(testBlock instanceof BloodRune)) { - return false; + if (!checkRuneSpecials(ac, new BlockStack(testBlock, testMeta))) + return false; } } else { @@ -108,7 +118,8 @@ public class UpgradedAltars if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - return false; + if (!checkSpecials(ac, new BlockStack(block, metadata))) + return false; } } } @@ -121,10 +132,12 @@ public class UpgradedAltars if (ac.isBloodRune()) { Block testBlock = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + int testMeta = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); if (!(testBlock instanceof BloodRune)) { - return false; + if (!checkRuneSpecials(ac, new BlockStack(testBlock, testMeta))) + return false; } } else { Block block = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); @@ -132,7 +145,7 @@ public class UpgradedAltars if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - if (!(ac.getBlock() == Blocks.beacon && block instanceof BlockBeacon)) + if (!checkSpecials(ac, new BlockStack(block, metadata))) return false; } } @@ -146,10 +159,12 @@ public class UpgradedAltars if (ac.isBloodRune()) { Block testBlock = world.getBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()); + int testMeta = world.getBlockMetadata(x + ac.getX(), y + ac.getY(), z + ac.getZ()); if (!(testBlock instanceof BloodRune)) { - return false; + if (!checkRuneSpecials(ac, new BlockStack(testBlock, testMeta))) + return false; } } else { @@ -158,7 +173,8 @@ public class UpgradedAltars if (((ac.getBlock() != block) || (ac.getMetadata() != metadata)) && !(ac.getBlock() == Blocks.stonebrick && !world.isAirBlock(x + ac.getX(), y + ac.getY(), z + ac.getZ()))) { - return false; + if (!checkSpecials(ac, new BlockStack(block, metadata))) + return false; } } } @@ -339,6 +355,31 @@ public class UpgradedAltars } } + private static boolean checkRuneSpecials(AltarComponent altarComponent, BlockStack blockStack) { + if (AlchemicalWizardry.isChiselLoaded) { + if (altarComponent.getBlock() == ModBlocks.bloodRune && CompatChecks.checkChiselBlock(blockStack, "bloodRune")) + return true; + } + + return false; + } + + private static boolean checkSpecials(AltarComponent altarComponent, BlockStack blockStack) { + + if (AlchemicalWizardry.isChiselLoaded) { + if (altarComponent.getBlock() == Blocks.glowstone && CompatChecks.checkChiselBlock(blockStack, "glowstone")) + return true; + + if (altarComponent.getBlock() == ModBlocks.largeBloodStoneBrick && CompatChecks.checkChiselBlock(blockStack, "bloodBrick")) + return true; + } + + if (altarComponent.getBlock() == Blocks.beacon && blockStack.getBlock() instanceof BlockBeacon) + return true; + + return false; + } + public static List getAltarUpgradeListForTier(int tier) { switch (tier)