diff --git a/build.gradle b/build.gradle index 01cc97b..8e2a596 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -version = "1.0.1" +version = "1.1a" group = "nl.requios.effortlessbuilding" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "effortlessbuilding" @@ -33,6 +33,10 @@ minecraft { // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. } +repositories { + flatDir { dirs 'libs' } +} + dependencies { // you may put jars on which you depend on in ./libs // or you may define them like so.. @@ -50,6 +54,7 @@ dependencies { // except that these dependencies get remapped to your current MCP mappings //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev' //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + provided 'mod.chiselsandbits:chiselsandbits:14.30' // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html diff --git a/libs/chiselsandbits-14.30.jar b/libs/chiselsandbits-14.30.jar new file mode 100644 index 0000000..3598b64 Binary files /dev/null and b/libs/chiselsandbits-14.30.jar differ diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index 2231202..266de5a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -22,6 +22,7 @@ import net.minecraftforge.fml.relauncher.Side; import nl.requios.effortlessbuilding.capability.ModeCapabilityManager; import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager; import nl.requios.effortlessbuilding.command.CommandReach; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.RandomizerBagGuiHandler; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; import nl.requios.effortlessbuilding.item.ItemReachUpgrade1; @@ -37,7 +38,7 @@ public class EffortlessBuilding { public static final String MODID = "effortlessbuilding"; public static final String NAME = "Effortless Building"; - public static final String VERSION = "1.0.1"; + public static final String VERSION = "1.1a"; @Mod.Instance(EffortlessBuilding.MODID) public static EffortlessBuilding instance; @@ -100,6 +101,7 @@ public class EffortlessBuilding EffortlessBuilding.packetHandler.registerMessage(RequestLookAtMessage.MessageHandler.class, RequestLookAtMessage.class, 5, Side.CLIENT); proxy.preInit(event); + CompatHelper.preInit(); } @EventHandler diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index bcd306c..12c4c01 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -2,12 +2,14 @@ package nl.requios.effortlessbuilding.buildmode; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.*; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.helper.ReachHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.network.BlockBrokenMessage; @@ -94,7 +96,10 @@ public class BuildModes { //Use a network message to break blocks in the distance using clientside mouse input public static void onBlockBrokenMessage(EntityPlayer player, BlockBrokenMessage message) { BlockPos blockPos = message.getBlockPos(); - if (ReachHelper.canBreakFar(player) && message.isBlockHit()) { + + if (ReachHelper.canBreakFar(player) && message.isBlockHit() && + !CompatHelper.chiselsAndBitsProxy.isHoldingChiselTool(EnumHand.MAIN_HAND)) { + BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(player.world, blockPos, player.world.getBlockState(blockPos), player); onBlockBroken(event); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java index 6fb56c5..8e0544a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java @@ -2,7 +2,6 @@ package nl.requios.effortlessbuilding.buildmodifier; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemBlock; @@ -10,16 +9,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.helper.CompatHelper; -import nl.requios.effortlessbuilding.helper.ReachHelper; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; -import nl.requios.effortlessbuilding.network.BlockBrokenMessage; import nl.requios.effortlessbuilding.network.BlockPlacedMessage; import java.util.ArrayList; @@ -53,7 +48,7 @@ public class BuildModifiers { if (world.isBlockLoaded(blockPos, true)) { //check itemstack empty if (itemStack.isEmpty()) continue; - SurvivalHelper.placeBlock(world, player, blockPos, blockState, itemStack, EnumFacing.UP, true, false); + SurvivalHelper.placeBlock(world, player, blockPos, blockState, itemStack, EnumFacing.UP, hitVec, true, false); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/compatibility/ActiveChiselsAndBitsProxy.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/ActiveChiselsAndBitsProxy.java new file mode 100644 index 0000000..667991d --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/ActiveChiselsAndBitsProxy.java @@ -0,0 +1,13 @@ +package nl.requios.effortlessbuilding.compatibility; + +import mod.chiselsandbits.core.ClientSide; +import mod.chiselsandbits.helpers.ChiselToolType; +import net.minecraft.util.EnumHand; + +public class ActiveChiselsAndBitsProxy implements IChiselsAndBitsProxy { + @Override + public boolean isHoldingChiselTool(EnumHand hand) { + ChiselToolType toolType = ClientSide.instance.getHeldToolType(hand); + return toolType != null && toolType.hasMenu(); + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/CompatHelper.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java similarity index 84% rename from src/main/java/nl/requios/effortlessbuilding/helper/CompatHelper.java rename to src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java index d6ea153..91f48a6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/CompatHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java @@ -1,19 +1,13 @@ -package nl.requios.effortlessbuilding.helper; - -import java.util.ArrayList; -import java.util.List; +package nl.requios.effortlessbuilding.compatibility; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; public class CompatHelper { @@ -22,6 +16,21 @@ public class CompatHelper { @GameRegistry.ObjectHolder("danknull:dank_null") public static final Item dankNullItem = null; + public static IChiselsAndBitsProxy chiselsAndBitsProxy; + + public static void preInit() { + if (Loader.isModLoaded("chiselsandbits")) { + // reflection to avoid hard dependency + try { + chiselsAndBitsProxy = Class.forName("nl.requios.effortlessbuilding.compatibility.ActiveChiselsAndBitsProxy").asSubclass(ActiveChiselsAndBitsProxy.class).newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { + e.printStackTrace(); + } + } else { + chiselsAndBitsProxy = new DummyChiselsAndBitsProxy(); + } + } + // Check if the item given is a proxy for blocks. For now, we check for the randomizer bag, // /dank/null, or plain old blocks. public static boolean isItemBlockProxy(ItemStack stack) { @@ -86,4 +95,5 @@ public class CompatHelper { } return -1; } + } diff --git a/src/main/java/nl/requios/effortlessbuilding/compatibility/DummyChiselsAndBitsProxy.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/DummyChiselsAndBitsProxy.java new file mode 100644 index 0000000..7c37894 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/DummyChiselsAndBitsProxy.java @@ -0,0 +1,10 @@ +package nl.requios.effortlessbuilding.compatibility; + +import net.minecraft.util.EnumHand; + +public class DummyChiselsAndBitsProxy implements IChiselsAndBitsProxy { + @Override + public boolean isHoldingChiselTool(EnumHand hand) { + return false; + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/compatibility/IChiselsAndBitsProxy.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/IChiselsAndBitsProxy.java new file mode 100644 index 0000000..ec288ba --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/IChiselsAndBitsProxy.java @@ -0,0 +1,7 @@ +package nl.requios.effortlessbuilding.compatibility; + +import net.minecraft.util.EnumHand; + +public interface IChiselsAndBitsProxy { + boolean isHoldingChiselTool(EnumHand hand); +} diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java b/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java index f1b4536..d284f21 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java @@ -10,20 +10,19 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Enchantments; -import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; -import nl.requios.effortlessbuilding.item.ItemRandomizerBag; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -34,7 +33,8 @@ public class SurvivalHelper { //Used for all placing of blocks in this mod. //Checks if area is loaded, if player has the right permissions, if existing block can be replaced (drops it if so) and consumes an item from the stack. //Based on ItemBlock#onItemUse - public static boolean placeBlock(World world, EntityPlayer player, BlockPos pos, IBlockState blockState, ItemStack origstack, EnumFacing facing, boolean skipCollisionCheck, boolean playSound) { + public static boolean placeBlock(World world, EntityPlayer player, BlockPos pos, IBlockState blockState, + ItemStack origstack, EnumFacing facing, Vec3d hitVec, boolean skipCollisionCheck, boolean playSound) { if (!world.isBlockLoaded(pos, true)) return false; ItemStack itemstack = origstack; @@ -52,26 +52,28 @@ public class SurvivalHelper { //TODO check if can replace dropBlock(world, player, pos); - //From ItemBlock#placeBlockAt - if (!world.setBlockState(pos, blockState, 11)) return false; + boolean placed = ((ItemBlock) itemstack.getItem()).placeBlockAt(itemstack, player, world, pos, facing, (float) hitVec.x, (float) hitVec.y, (float) hitVec.z, blockState); + if (!placed) return false; - IBlockState state = world.getBlockState(pos); - if (state.getBlock() == block) - { - ((ItemBlock) itemstack.getItem()).setTileEntityNBT(world, player, pos, itemstack); - block.onBlockPlacedBy(world, pos, state, player, itemstack); - -// if (player instanceof EntityPlayerMP) -// CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); - } +// //From ItemBlock#placeBlockAt +// if (!world.setBlockState(pos, blockState, 11)) return false; +// + IBlockState afterState = world.getBlockState(pos); +// if (afterState.getBlock() == block) +// { +// ((ItemBlock) itemstack.getItem()).setTileEntityNBT(world, player, pos, itemstack); +// block.onBlockPlacedBy(world, pos, afterState, player, itemstack); +// +//// if (player instanceof EntityPlayerMP) +//// CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); +// } if (playSound) { - SoundType soundtype = state.getBlock().getSoundType(state, world, pos, player); + SoundType soundtype = afterState.getBlock().getSoundType(afterState, world, pos, player); world.playSound(null, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); } if (!player.isCreative() && Block.getBlockFromItem(itemstack.getItem()) == block) { - //itemstack.shrink(1); CompatHelper.shrinkStack(origstack, itemstack); } diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java b/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java index 1bfbcc2..03357c1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java @@ -13,6 +13,7 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; @@ -72,7 +73,7 @@ public class ItemRandomizerBag extends Item { IBlockState blockState = Block.getBlockFromItem(toPlace.getItem()).getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, toPlace.getMetadata(), player, hand); - SurvivalHelper.placeBlock(world, player, pos, blockState, toPlace, facing, false, true); + SurvivalHelper.placeBlock(world, player, pos, blockState, toPlace, facing, new Vec3d(hitX, hitY, hitZ), false, true); //Synergy //Works without calling diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index 1986322..072f5b7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -4,21 +4,15 @@ import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.texture.TextureUtil; -import net.minecraft.client.resources.IResource; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.SoundEvents; import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import net.minecraft.util.IThreadListener; @@ -29,7 +23,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.entity.EntityJoinWorldEvent; @@ -52,17 +45,13 @@ import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui; -import nl.requios.effortlessbuilding.helper.CompatHelper; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.helper.ReachHelper; import nl.requios.effortlessbuilding.render.RenderHandler; import nl.requios.effortlessbuilding.render.ShaderHandler; -import nl.requios.effortlessbuilding.item.ItemRandomizerBag; import nl.requios.effortlessbuilding.network.*; import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; -import java.awt.image.BufferedImage; -import java.io.IOException; import java.util.HashMap; @Mod.EventBusSubscriber(Side.CLIENT) diff --git a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviewRenderer.java b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviewRenderer.java index db6f74e..a5e8f4d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviewRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviewRenderer.java @@ -8,7 +8,6 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; @@ -26,7 +25,7 @@ import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.ModeSettings; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager.ModifierSettings; -import nl.requios.effortlessbuilding.helper.CompatHelper; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.helper.ReachHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java index fa9c5b7..106e36c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java @@ -13,6 +13,7 @@ import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; @@ -31,6 +32,7 @@ import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; +import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.network.ModeSettingsMessage; import nl.requios.effortlessbuilding.proxy.ClientProxy; @@ -65,13 +67,15 @@ public class RenderHandler implements IWorldEventListener { } @SubscribeEvent + //Display Radial Menu public static void onRenderGameOverlay(final RenderGameOverlayEvent.Post event ) { EntityPlayerSP player = Minecraft.getMinecraft().player; - //final ChiselToolType tool = getHeldToolType( lastHand ); + //check if chisel and bits tool in hand (and has menu) + final boolean hasChiselInHand = CompatHelper.chiselsAndBitsProxy.isHoldingChiselTool(EnumHand.MAIN_HAND); + final RenderGameOverlayEvent.ElementType type = event.getType(); - //TODO check if chisel and bits tool in hand (and has menu) - if (type == RenderGameOverlayEvent.ElementType.ALL) { + if (type == RenderGameOverlayEvent.ElementType.ALL && !hasChiselInHand) { final boolean wasVisible = RadialMenu.instance.isVisible(); if (ClientProxy.keyBindings[3].isKeyDown()) {