diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 013e99a82..71818d859 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -57,6 +57,7 @@ import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.*; +import lib.mcjty.varia.WrenchChecker; // So that BuildCraft Oil always gets used @Mod(modid = ModUtil.MOD_ID, name = ModUtil.NAME, version = ModUtil.VERSION, dependencies = "after:BuildCraft|Energy", guiFactory = "de.ellpeck.actuallyadditions.mod.config.GuiFactory") @@ -105,6 +106,8 @@ public class ActuallyAdditions{ new UpdateChecker(); proxy.preInit(event); + WrenchChecker.init(); + ModUtil.LOGGER.info("PreInitialization Finished."); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 2f15eff7f..4fa5abbe4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -28,6 +28,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemCompass; import net.minecraft.item.ItemStack; @@ -48,6 +49,7 @@ import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import lib.mcjty.varia.WrenchChecker; public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ @@ -163,7 +165,8 @@ public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ if(tile instanceof TileEntityLaserRelay){ TileEntityLaserRelay relay = (TileEntityLaserRelay)tile; - if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemCompass){ + Item item = stack.getItem(); + if(StackUtil.isValid(stack) && (item instanceof ItemCompass || WrenchChecker.isAWrench(item))){ if(!world.isRemote){ relay.onCompassAction(player); @@ -210,8 +213,9 @@ public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ @SideOnly(Side.CLIENT) public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, ScaledResolution resolution){ if(posHit != null && posHit.getBlockPos() != null && minecraft.world != null && StackUtil.isValid(stack)){ - boolean compass = stack.getItem() instanceof ItemCompass; - if(compass || stack.getItem() instanceof ItemLaserWrench){ + Item item = stack.getItem(); + boolean compass = (item instanceof ItemCompass || WrenchChecker.isAWrench(item)); + if(compass || item instanceof ItemLaserWrench){ TileEntity tile = minecraft.world.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityLaserRelay){ TileEntityLaserRelay relay = (TileEntityLaserRelay)tile; @@ -224,7 +228,7 @@ public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ expl = relay.getCompassDisplayString(); } else{ - expl = TextFormatting.GRAY.toString()+TextFormatting.ITALIC+"Hold a Compass to modify!"; + expl = TextFormatting.GRAY.toString()+TextFormatting.ITALIC+"Hold a Compass or wrench to modify!"; } StringUtil.drawSplitString(minecraft.fontRendererObj, expl, resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+15, Integer.MAX_VALUE, StringUtil.DECIMAL_COLOR_WHITE, true); diff --git a/src/main/java/lib/mcjty/varia/WrenchChecker.java b/src/main/java/lib/mcjty/varia/WrenchChecker.java new file mode 100644 index 000000000..4b637dab1 --- /dev/null +++ b/src/main/java/lib/mcjty/varia/WrenchChecker.java @@ -0,0 +1,56 @@ +package lib.mcjty.varia; + +import net.minecraft.item.Item; + +import java.util.ArrayList; +import java.util.List; + +public class WrenchChecker { + + private static List wrenchClasses=new ArrayList(); + + public static void init() { + for (String className : new String[] { + /* + * Can add or remove class names here + * Use API interface names where possible, in case of refactoring + * note that many mods implement BC wrench API iff BC is installed + * and include no wrench API of their own - we use implementation + * classes here to catch these cases. + */ + "buildcraft.api.tools.IToolWrench", //Buildcraft + "resonant.core.content.ItemScrewdriver", //Resonant Induction + "ic2.core.item.tool.ItemToolWrench", //IC2 + "ic2.core.item.tool.ItemToolWrenchElectric", //IC2 (more) + "mrtjp.projectred.api.IScrewdriver", //Project Red + "mods.railcraft.api.core.items.IToolCrowbar", //Railcraft + "com.bluepowermod.items.ItemScrewdriver", //BluePower + "cofh.api.item.IToolHammer", //Thermal Expansion and compatible + "thermalexpansion.item.tool.ItemWrench", + "appeng.items.tools.quartz.ToolQuartzWrench", //Applied Energistics + "crazypants.enderio.api.tool.ITool", //Ender IO + "mekanism.api.IMekWrench", //Mekanism + "mcjty.rftools.items.smartwrench", //RFTools + "pneumaticCraft.common.item.ItemPneumaticWrench", + "powercrystals.minefactoryreloaded.api.IToolHammer" + + }) { + try { + wrenchClasses.add(Class.forName(className)); + de.ellpeck.actuallyadditions.mod.util.ModUtil.LOGGER.info("Found wrench class " + className); + } catch (ClassNotFoundException e) { + // Logging.log("Failed to load wrench class " + className + " (this is not an error)"); + } + } + } + + public static boolean isAWrench(Item item) { + for (Class c : wrenchClasses) { + if (c.isAssignableFrom(item.getClass())) { + return true; + } + } + return false; + } + +}