diff --git a/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java b/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java index 8931554d..3c122061 100644 --- a/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java +++ b/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java @@ -4,6 +4,7 @@ public enum ButtonAction { UNDO, REDO, + PICK_BIT, REPLACE_TOGGLE, diff --git a/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java b/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java index 91f29178..626da5ba 100644 --- a/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java +++ b/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java @@ -190,6 +190,11 @@ public void drawScreen( final ArrayList modes = new ArrayList(); final ArrayList btns = new ArrayList(); + if ( tool == ChiselToolType.BIT || tool == ChiselToolType.CHISEL ) + { + btns.add( new MenuButton( LocalStrings.BitPickBit.toString(), ButtonAction.PICK_BIT, text_distnace, 28, ClientSide.pickIcon, EnumFacing.EAST ) ); + } + if ( tool == ChiselToolType.BIT ) { if ( ChiselsAndBits.getConfig().replaceingBits ) diff --git a/src/main/java/mod/chiselsandbits/core/ClientSide.java b/src/main/java/mod/chiselsandbits/core/ClientSide.java index 337a49ca..825c5106 100644 --- a/src/main/java/mod/chiselsandbits/core/ClientSide.java +++ b/src/main/java/mod/chiselsandbits/core/ClientSide.java @@ -98,6 +98,7 @@ import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; @@ -417,6 +418,7 @@ public Map putStateModelLocations( public static TextureAtlasSprite redoIcon; public static TextureAtlasSprite trashIcon; + public static TextureAtlasSprite pickIcon; public static TextureAtlasSprite swapIcon; public static TextureAtlasSprite placeIcon; @@ -425,6 +427,7 @@ void registerIconTextures( final TextureStitchEvent.Pre ev ) { final TextureMap map = ev.getMap(); + pickIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/pick_bit" ) ); swapIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/swap" ) ); placeIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/place" ) ); undoIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/undo" ) ); @@ -545,6 +548,10 @@ public void onRenderGUI( ClientSide.instance.playRadialMenu(); switch ( ChiselsAndBitsMenu.instance.doAction ) { + case PICK_BIT: + doPickPit(); + break; + case REPLACE_TOGGLE: ChiselsAndBits.getConfig().replaceingBits = !ChiselsAndBits.getConfig().replaceingBits; ReflectionWrapper.instance.clearHighlightedStack(); @@ -657,28 +664,7 @@ public void onRenderGUI( if ( pickBit.isPressed() ) { - final Minecraft mc = Minecraft.getMinecraft(); - if ( mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK ) - { - try - { - final BitLocation bl = new BitLocation( mc.objectMouseOver, true, BitOperation.CHISEL ); - final IBitAccess access = ChiselsAndBits.getApi().getBitAccess( mc.theWorld, bl.getBlockPos() ); - final IBitBrush brush = access.getBitAt( bl.getBitX(), bl.getBitY(), bl.getBitZ() ); - if ( brush != null ) - { - final ItemStack is = brush.getItemStack( 1 ); - if ( is != null ) - { - doPick( is ); - } - } - } - catch ( final CannotBeChiseled e ) - { - // nope. - } - } + doPickPit(); } if ( type == ElementType.HOTBAR && ChiselsAndBits.getConfig().enableToolbarIcons ) @@ -719,6 +705,32 @@ public void onRenderGUI( } } + public void doPickPit() + { + final Minecraft mc = Minecraft.getMinecraft(); + if ( mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK ) + { + try + { + final BitLocation bl = new BitLocation( mc.objectMouseOver, true, BitOperation.CHISEL ); + final IBitAccess access = ChiselsAndBits.getApi().getBitAccess( mc.theWorld, bl.getBlockPos() ); + final IBitBrush brush = access.getBitAt( bl.getBitX(), bl.getBitY(), bl.getBitZ() ); + if ( brush != null ) + { + final ItemStack is = brush.getItemStack( 1 ); + if ( is != null ) + { + doPick( is ); + } + } + } + catch ( final CannotBeChiseled e ) + { + // nope. + } + } + } + public void playRadialMenu() { final float volume = ChiselsAndBits.getConfig().radialMenuVolume; @@ -734,35 +746,25 @@ private boolean doPick( { final EntityPlayer player = getPlayer(); - for ( int x = 0; x < 9; x++ ) + if ( player.capabilities.isCreativeMode ) { - final ItemStack stack = player.inventory.getStackInSlot( x ); - if ( stack != null && stack.isItemEqual( result ) && ItemStack.areItemStackTagsEqual( stack, result ) ) - { - player.inventory.currentItem = x; - return true; - } + player.inventory.setPickedItemStack( result ); + Minecraft.getMinecraft().playerController.sendSlotPacket( player.getHeldItem( EnumHand.MAIN_HAND ), 36 + player.inventory.currentItem ); + return true; } - if ( !player.capabilities.isCreativeMode ) + int slot = player.inventory.getSlotFor( result ); + if ( slot != -1 ) { - return false; - } + if ( InventoryPlayer.isHotbar( slot ) ) + player.inventory.currentItem = slot; + else + Minecraft.getMinecraft().playerController.pickItem( slot ); - int slot = player.inventory.getFirstEmptyStack(); - if ( slot < 0 || slot >= 9 ) - { - slot = player.inventory.currentItem; + return true; } - // update inventory.. - player.inventory.setInventorySlotContents( slot, result ); - player.inventory.currentItem = slot; - - // update server... - final int j = player.inventoryContainer.inventorySlots.size() - 9 + player.inventory.currentItem; - Minecraft.getMinecraft().playerController.sendSlotPacket( player.inventory.getStackInSlot( player.inventory.currentItem ), j ); - return true; + return false; } public ChiselToolType getHeldToolType( diff --git a/src/main/java/mod/chiselsandbits/helpers/LocalStrings.java b/src/main/java/mod/chiselsandbits/helpers/LocalStrings.java index 9031a110..21a0c0f6 100644 --- a/src/main/java/mod/chiselsandbits/helpers/LocalStrings.java +++ b/src/main/java/mod/chiselsandbits/helpers/LocalStrings.java @@ -93,6 +93,7 @@ public enum LocalStrings BlueprintCannotMove( "blueprint.cannotmove" ), BlueprintFinished( "blueprint.finished" ), + BitPickBit( "bitoption.pick" ), BitOptionPlace( "bitoption.place" ), BitOptionReplace( "bitoption.replace" ), diff --git a/src/main/resources/assets/chiselsandbits/lang/en_us.lang b/src/main/resources/assets/chiselsandbits/lang/en_us.lang index 1378ecb8..76d44268 100644 --- a/src/main/resources/assets/chiselsandbits/lang/en_us.lang +++ b/src/main/resources/assets/chiselsandbits/lang/en_us.lang @@ -56,6 +56,7 @@ mod.chiselsandbits.chiselmode.same_material=Same Material mod.chiselsandbits.bitoption.place=Place mod.chiselsandbits.bitoption.replace=Replace +mod.chiselsandbits.bitoption.pick=Pick Bit mod.chiselsandbits.positivepatternmode.replace=Replace mod.chiselsandbits.positivepatternmode.additive=Additive diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/nudge_bit.png b/src/main/resources/assets/chiselsandbits/textures/icons/nudge_bit.png new file mode 100644 index 00000000..5c5a3f3d Binary files /dev/null and b/src/main/resources/assets/chiselsandbits/textures/icons/nudge_bit.png differ diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/nudge_block.png b/src/main/resources/assets/chiselsandbits/textures/icons/nudge_block.png new file mode 100644 index 00000000..a936f967 Binary files /dev/null and b/src/main/resources/assets/chiselsandbits/textures/icons/nudge_block.png differ diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/pick_bit.png b/src/main/resources/assets/chiselsandbits/textures/icons/pick_bit.png new file mode 100644 index 00000000..889d9f8a Binary files /dev/null and b/src/main/resources/assets/chiselsandbits/textures/icons/pick_bit.png differ diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/rotate.png b/src/main/resources/assets/chiselsandbits/textures/icons/rotate.png new file mode 100644 index 00000000..9bc89fd1 Binary files /dev/null and b/src/main/resources/assets/chiselsandbits/textures/icons/rotate.png differ