Added Chisels and Bits compatibility (no double radial menu).
Added preliminary Architecturecraft compatibility (places right type, not rotation yet).
This commit is contained in:
@@ -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
|
||||
|
||||
BIN
libs/chiselsandbits-14.30.jar
Normal file
BIN
libs/chiselsandbits-14.30.jar
Normal file
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package nl.requios.effortlessbuilding.compatibility;
|
||||
|
||||
import net.minecraft.util.EnumHand;
|
||||
|
||||
public interface IChiselsAndBitsProxy {
|
||||
boolean isHoldingChiselTool(EnumHand hand);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user