public void PickBlock() { MouseOverObject moo = SharpCraft.Instance.MouseOverObject; if (moo.hit == HitType.Block) { var clickedState = World.GetBlockState(moo.blockPos); if (clickedState.Block != BlockRegistry.GetBlock <BlockAir>()) { for (int i = 0; i < Hotbar.Length; i++) { ItemStack stack = Hotbar[i]; if (stack?.Item is ItemBlock ib && ib.Block == clickedState.Block && stack.Meta == clickedState.Block.GetMetaFromState(clickedState)) { SetSelectedSlot(i); return; } if (stack?.IsEmpty == true) { ItemBlock itemBlock = new ItemBlock(clickedState.Block); ItemStack itemStack = new ItemStack(itemBlock, 1, clickedState.Block.GetMetaFromState(clickedState)); SetItemStackInHotbar(i, itemStack); SetSelectedSlot(i); return; } } SetItemStackInSelectedSlot(new ItemStack(new ItemBlock(clickedState.Block), 1, clickedState.Block.GetMetaFromState(clickedState))); } } }
public void BreakBlock() { MouseOverObject moo = SharpCraft.Instance.MouseOverObject; if (moo.hit != HitType.Block) { return; } BlockState state = World.GetBlockState(moo.blockPos); if (JsonModelLoader.GetModelForBlock(state.Block.UnlocalizedName) != null) { SharpCraft.Instance.ParticleRenderer.SpawnDestroyParticles(moo.blockPos, state); } World.SetBlockState(moo.blockPos, BlockRegistry.GetBlock <BlockAir>().GetState()); Vector3 motion = new Vector3(MathUtil.NextFloat(-0.15f, 0.15f), 0.3f, MathUtil.NextFloat(-0.15f, 0.15f)); EntityItem entityDrop = new EntityItem(World, moo.blockPos.ToVec() + Vector3.One * 0.5f, motion, new ItemStack(new ItemBlock(state.Block), 1, state.Block.GetMetaFromState(state))); World.AddEntity(entityDrop); SharpCraft.Instance.GetMouseOverObject(); }
public void OnClick(MouseButton btn) { MouseOverObject moo = SharpCraft.Instance.MouseOverObject; if (moo.hit == HitType.Block) { if (btn == MouseButton.Right) { BlockState state = World.GetBlockState(moo.blockPos); if (state.Block.CanBeInteractedWith) { if (state.Block == BlockRegistry.GetBlock <BlockCraftingTable>()) { SharpCraft.Instance.OpenGuiScreen(new GuiScreenCrafting()); } } else { PlaceBlock(); } } else if (btn == MouseButton.Left) { //BreakBlock(); TODO - UVMin breaking EDIT: whhhat? :DDD } } }
public void PlaceBlock() { MouseOverObject moo = SharpCraft.Instance.MouseOverObject; if (moo.hit != HitType.Block) { return; } ItemStack stack = GetEquippedItemStack(); if (!(stack?.Item is ItemBlock itemBlock)) { return; } Block air = BlockRegistry.GetBlock <BlockAir>(); Block glass = BlockRegistry.GetBlock <BlockGlass>(); Block grass = BlockRegistry.GetBlock <BlockGrass>(); Block dirt = BlockRegistry.GetBlock <BlockDirt>(); BlockState clickedState = World.GetBlockState(moo.blockPos); bool replacing; BlockPos pos = (replacing = clickedState.Block.IsReplaceable && itemBlock.Block != clickedState.Block) ? moo.blockPos : moo.blockPos.Offset(moo.sideHit); Block heldBlock = itemBlock.Block; AxisAlignedBB blockBb = heldBlock.BoundingBox.offset(pos.ToVec()); if (!replacing && World.GetBlockState(pos).Block != air || World.GetIntersectingEntitiesBBs(blockBb).Count > 0 && heldBlock.IsSolid) { return; } BlockPos posUnder = pos.Offset(FaceSides.Down); BlockState stateUnder = World.GetBlockState(posUnder); BlockState stateAbove = World.GetBlockState(pos.Offset(FaceSides.Up)); if (stateUnder.Block == grass && heldBlock != glass && heldBlock.IsSolid) { World.SetBlockState(posUnder, dirt.GetState()); } if (stateAbove.Block != air && stateAbove.Block != glass && heldBlock == grass && stateAbove.Block.IsSolid) { World.SetBlockState(pos, dirt.GetState()); } else { World.SetBlockState(pos, heldBlock.GetState(stack.Meta)); } stack.Count--; SharpCraft.Instance.GetMouseOverObject(); }