From 506c98809c1c290ca52dfa7076967c5872ef57a4 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Sat, 10 Nov 2018 15:14:09 -0600 Subject: [PATCH] Rotate X / Z buttons. Implements #114 --- .../chiseledblock/ItemBlockChiseled.java | 33 ++++++++++++-- .../client/gui/ButtonAction.java | 3 ++ .../client/gui/ChiselsAndBitsMenu.java | 12 ++++- .../mod/chiselsandbits/core/ClientSide.java | 37 ++++++++++++--- .../helpers/ChiselToolType.java | 4 +- .../interfaces/IVoxelBlobItem.java | 8 ++-- .../items/ItemNegativePrint.java | 42 +++++++++++++++--- .../packets/PacketRotateVoxelBlob.java | 13 ++++-- .../assets/chiselsandbits/lang/en_us.lang | 3 ++ .../chiselsandbits/textures/icons/roll_x.png | Bin 0 -> 264 bytes .../chiselsandbits/textures/icons/roll_z.png | Bin 0 -> 265 bytes 11 files changed, 131 insertions(+), 24 deletions(-) create mode 100644 src/main/resources/assets/chiselsandbits/textures/icons/roll_x.png create mode 100644 src/main/resources/assets/chiselsandbits/textures/icons/roll_z.png diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/ItemBlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/ItemBlockChiseled.java index 219874ba..664233a0 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/ItemBlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/ItemBlockChiseled.java @@ -6,6 +6,7 @@ import javax.annotation.Nonnull; import mod.chiselsandbits.api.EventBlockBitModification; +import mod.chiselsandbits.api.IBitAccess; import mod.chiselsandbits.chiseledblock.data.BitLocation; import mod.chiselsandbits.chiseledblock.data.IntegerBox; import mod.chiselsandbits.chiseledblock.data.VoxelBlob; @@ -38,7 +39,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumFacing.Axis; import net.minecraft.util.EnumHand; +import net.minecraft.util.Rotation; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -481,18 +484,42 @@ public void scroll( final int dwheel ) { final PacketRotateVoxelBlob p = new PacketRotateVoxelBlob(); - p.rotationDirection = dwheel; + p.axis = Axis.Y; + p.rotation = dwheel > 0 ? Rotation.CLOCKWISE_90 : Rotation.COUNTERCLOCKWISE_90; NetworkRouter.instance.sendToServer( p ); } @Override public void rotate( final ItemStack stack, - final int rotationDirection ) + final Axis axis, + final Rotation rotation ) { EnumFacing side = ModUtil.getSide( stack ); - side = rotationDirection > 0 ? side.rotateY() : side.rotateYCCW(); + if ( axis == Axis.Y ) + { + switch ( rotation ) + { + case CLOCKWISE_180: + side = side.rotateY(); + case CLOCKWISE_90: + side = side.rotateY(); + break; + case COUNTERCLOCKWISE_90: + side = side.rotateYCCW(); + break; + default: + case NONE: + break; + } + } + else + { + IBitAccess ba = ChiselsAndBits.getApi().createBitItem( stack ); + ba.rotate( axis, rotation ); + stack.setTagCompound( ba.getBitsAsItem( side, ChiselsAndBits.getApi().getItemType( stack ), false ).getTagCompound() ); + } ModUtil.setSide( stack, side ); } diff --git a/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java b/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java index 8931554d..dae70c18 100644 --- a/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java +++ b/src/main/java/mod/chiselsandbits/client/gui/ButtonAction.java @@ -5,6 +5,9 @@ public enum ButtonAction UNDO, REDO, + ROLL_X, + ROLL_Z, + REPLACE_TOGGLE, WHITE, diff --git a/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java b/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java index 91f29178..3af157e6 100644 --- a/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java +++ b/src/main/java/mod/chiselsandbits/client/gui/ChiselsAndBitsMenu.java @@ -205,6 +205,12 @@ public void drawScreen( btns.add( new MenuButton( "mod.chiselsandbits.other.undo", ButtonAction.UNDO, text_distnace, -20, ClientSide.undoIcon, EnumFacing.EAST ) ); btns.add( new MenuButton( "mod.chiselsandbits.other.redo", ButtonAction.REDO, text_distnace, 4, ClientSide.redoIcon, EnumFacing.EAST ) ); + if ( tool == ChiselToolType.CHISELED_BLOCK || tool == ChiselToolType.NEGATIVEPATTERN || tool == ChiselToolType.POSITIVEPATTERN ) + { + btns.add( new MenuButton( "mod.chiselsandbits.other.roll_x", ButtonAction.ROLL_X, -text_distnace - 18, -20, ClientSide.roll_x, EnumFacing.WEST ) ); + btns.add( new MenuButton( "mod.chiselsandbits.other.roll_z", ButtonAction.ROLL_Z, -text_distnace - 18, 4, ClientSide.roll_z, EnumFacing.WEST ) ); + } + if ( tool == ChiselToolType.TAPEMEASURE ) { final int colorSize = EnumDyeColor.values().length / 4 * 24 - 4; @@ -415,7 +421,11 @@ else if ( -0.2 <= x && x <= 0.2 ) { final String text = DeprecationHelper.translateToLocal( btn.name ); - if ( btn.textSide == EnumFacing.EAST ) + if ( btn.textSide == EnumFacing.WEST ) + { + fontRendererObj.drawStringWithShadow( text, (int) ( middle_x + btn.x1 - 8 ) - fontRendererObj.getStringWidth( text ), (int) ( middle_y + btn.y1 + 6 ), 0xffffffff ); + } + else if ( btn.textSide == EnumFacing.EAST ) { fontRendererObj.drawStringWithShadow( text, (int) ( middle_x + btn.x2 + 8 ), (int) ( middle_y + btn.y1 + 6 ), 0xffffffff ); } diff --git a/src/main/java/mod/chiselsandbits/core/ClientSide.java b/src/main/java/mod/chiselsandbits/core/ClientSide.java index dc1bbecc..b65bbf1c 100644 --- a/src/main/java/mod/chiselsandbits/core/ClientSide.java +++ b/src/main/java/mod/chiselsandbits/core/ClientSide.java @@ -107,6 +107,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -401,6 +402,9 @@ public Map putStateModelLocations( public static TextureAtlasSprite swapIcon; public static TextureAtlasSprite placeIcon; + public static TextureAtlasSprite roll_x; + public static TextureAtlasSprite roll_z; + @SubscribeEvent void registerIconTextures( final TextureStitchEvent.Pre ev ) @@ -411,6 +415,8 @@ void registerIconTextures( undoIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/undo" ) ); redoIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/redo" ) ); trashIcon = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/trash" ) ); + roll_x = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/roll_x" ) ); + roll_z = map.registerSprite( new ResourceLocation( "chiselsandbits", "icons/roll_z" ) ); for ( final ChiselMode mode : ChiselMode.values() ) { @@ -521,6 +527,20 @@ public void onRenderGUI( ClientSide.instance.playRadialMenu(); switch ( ChiselsAndBitsMenu.instance.doAction ) { + case ROLL_X: + PacketRotateVoxelBlob pri = new PacketRotateVoxelBlob(); + pri.axis = Axis.X; + pri.rotation = Rotation.CLOCKWISE_90; + NetworkRouter.instance.sendToServer( pri ); + break; + + case ROLL_Z: + PacketRotateVoxelBlob pri2 = new PacketRotateVoxelBlob(); + pri2.axis = Axis.Z; + pri2.rotation = Rotation.CLOCKWISE_90; + NetworkRouter.instance.sendToServer( pri2 ); + break; + case REPLACE_TOGGLE: ChiselsAndBits.getConfig().replaceingBits = !ChiselsAndBits.getConfig().replaceingBits; ReflectionWrapper.instance.clearHighlightedStack(); @@ -671,7 +691,7 @@ public void onRenderGUI( final ItemStack stack = mc.thePlayer.inventory.mainInventory.get( slot ); if ( stack != null && stack.getItem() instanceof ItemChisel ) { - final ChiselToolType toolType = getToolTypeForItemm( stack ); + final ChiselToolType toolType = getToolTypeForItem( stack ); IToolMode mode = toolType.getMode( stack ); if ( !ChiselsAndBits.getConfig().perChiselMode && tool == ChiselToolType.CHISEL ) @@ -752,10 +772,10 @@ public ChiselToolType getHeldToolType( } final ItemStack is = player.getHeldItem( enumHand ); - return getToolTypeForItemm( is ); + return getToolTypeForItem( is ); } - private ChiselToolType getToolTypeForItemm( + private ChiselToolType getToolTypeForItem( final ItemStack is ) { if ( is != null && is.getItem() instanceof ItemChisel ) @@ -768,6 +788,11 @@ private ChiselToolType getToolTypeForItemm( return ChiselToolType.BIT; } + if ( is != null && is.getItem() instanceof ItemBlockChiseled ) + { + return ChiselToolType.CHISELED_BLOCK; + } + if ( is != null && is.getItem() == ChiselsAndBits.getItems().itemTapeMeasure ) { return ChiselToolType.TAPEMEASURE; @@ -852,7 +877,8 @@ public void interaction( { rotateTimer = Stopwatch.createStarted(); final PacketRotateVoxelBlob p = new PacketRotateVoxelBlob(); - p.rotationDirection = 1; + p.axis = Axis.Y; + p.rotation = Rotation.COUNTERCLOCKWISE_90; NetworkRouter.instance.sendToServer( p ); } } @@ -863,7 +889,8 @@ public void interaction( { rotateTimer = Stopwatch.createStarted(); final PacketRotateVoxelBlob p = new PacketRotateVoxelBlob(); - p.rotationDirection = -1; + p.axis = Axis.Y; + p.rotation = Rotation.CLOCKWISE_90; NetworkRouter.instance.sendToServer( p ); } } diff --git a/src/main/java/mod/chiselsandbits/helpers/ChiselToolType.java b/src/main/java/mod/chiselsandbits/helpers/ChiselToolType.java index 685386d5..9c981b79 100644 --- a/src/main/java/mod/chiselsandbits/helpers/ChiselToolType.java +++ b/src/main/java/mod/chiselsandbits/helpers/ChiselToolType.java @@ -17,9 +17,11 @@ public enum ChiselToolType CHISEL( true, true ), BIT( true, false ), + CHISELED_BLOCK( true, false ), + POSITIVEPATTERN( true, true ), TAPEMEASURE( true, true ), - NEGATIVEPATTERN( false, false ), + NEGATIVEPATTERN( true, false ), MIRRORPATTERN( false, false ); final private boolean hasMenu; diff --git a/src/main/java/mod/chiselsandbits/interfaces/IVoxelBlobItem.java b/src/main/java/mod/chiselsandbits/interfaces/IVoxelBlobItem.java index 62923de9..2715b9af 100644 --- a/src/main/java/mod/chiselsandbits/interfaces/IVoxelBlobItem.java +++ b/src/main/java/mod/chiselsandbits/interfaces/IVoxelBlobItem.java @@ -1,12 +1,14 @@ package mod.chiselsandbits.interfaces; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing.Axis; +import net.minecraft.util.Rotation; public interface IVoxelBlobItem { void rotate( - ItemStack is, - int rotationDirection ); - + final ItemStack is, + final Axis axis, + final Rotation rotation ); } diff --git a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java index f615c502..269e076e 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java +++ b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java @@ -5,6 +5,7 @@ import javax.annotation.Nonnull; +import mod.chiselsandbits.api.IBitAccess; import mod.chiselsandbits.api.VoxelStats; import mod.chiselsandbits.chiseledblock.BlockChiseled; import mod.chiselsandbits.chiseledblock.NBTBlobConverter; @@ -38,6 +39,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing.Axis; import net.minecraft.util.EnumHand; +import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -151,7 +153,8 @@ public EnumActionResult onItemUse( final ItemStack stack = player.getHeldItem( hand ); final IBlockState blkstate = world.getBlockState( pos ); - if ( ItemChiseledBit.checkRequiredSpace( player, blkstate ) ) { + if ( ItemChiseledBit.checkRequiredSpace( player, blkstate ) ) + { return EnumActionResult.FAIL; } @@ -307,7 +310,7 @@ protected void applyPrint( BitInventoryFeeder feeder = new BitInventoryFeeder( who, world ); for ( final EntityItem ei : spawnlist ) { - feeder.addItem(ei); + feeder.addItem( ei ); } } @@ -318,23 +321,48 @@ public void scroll( final int dwheel ) { final PacketRotateVoxelBlob p = new PacketRotateVoxelBlob(); - p.rotationDirection = dwheel; + p.axis = Axis.Y; + p.rotation = dwheel > 0 ? Rotation.CLOCKWISE_90 : Rotation.COUNTERCLOCKWISE_90; NetworkRouter.instance.sendToServer( p ); } @Override public void rotate( final ItemStack stack, - final int rotationDirection ) + final Axis axis, + final Rotation rotation ) { EnumFacing side = ModUtil.getSide( stack ); - if ( side.getAxis() == Axis.Y ) + if ( axis == Axis.Y ) + { + if ( side.getAxis() == Axis.Y ) + { + side = EnumFacing.NORTH; + } + + switch ( rotation ) + { + case CLOCKWISE_180: + side = side.rotateY(); + case CLOCKWISE_90: + side = side.rotateY(); + break; + case COUNTERCLOCKWISE_90: + side = side.rotateYCCW(); + break; + default: + case NONE: + break; + } + } + else { - side = EnumFacing.NORTH; + IBitAccess ba = ChiselsAndBits.getApi().createBitItem( stack ); + ba.rotate( axis, rotation ); + stack.setTagCompound( ba.getBitsAsItem( side, ChiselsAndBits.getApi().getItemType( stack ), false ).getTagCompound() ); } - side = rotationDirection > 0 ? side.rotateY() : side.rotateYCCW(); ModUtil.setSide( stack, side ); } diff --git a/src/main/java/mod/chiselsandbits/network/packets/PacketRotateVoxelBlob.java b/src/main/java/mod/chiselsandbits/network/packets/PacketRotateVoxelBlob.java index 8ae4fcf7..a5ce6ebc 100644 --- a/src/main/java/mod/chiselsandbits/network/packets/PacketRotateVoxelBlob.java +++ b/src/main/java/mod/chiselsandbits/network/packets/PacketRotateVoxelBlob.java @@ -5,11 +5,14 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.EnumFacing.Axis; +import net.minecraft.util.Rotation; public class PacketRotateVoxelBlob extends ModPacket { - public int rotationDirection; + public Axis axis; + public Rotation rotation; @Override public void server( @@ -18,7 +21,7 @@ public void server( final ItemStack is = player.getHeldItemMainhand(); if ( is != null && is.getItem() instanceof IVoxelBlobItem ) { - ( (IVoxelBlobItem) is.getItem() ).rotate( is, rotationDirection ); + ( (IVoxelBlobItem) is.getItem() ).rotate( is, axis, rotation ); } } @@ -26,14 +29,16 @@ public void server( public void getPayload( final PacketBuffer buffer ) { - buffer.writeInt( rotationDirection ); + buffer.writeEnumValue( axis ); + buffer.writeEnumValue( rotation ); } @Override public void readPayload( final PacketBuffer buffer ) { - rotationDirection = buffer.readInt(); + axis = buffer.readEnumValue( Axis.class ); + rotation = buffer.readEnumValue( Rotation.class ); } } diff --git a/src/main/resources/assets/chiselsandbits/lang/en_us.lang b/src/main/resources/assets/chiselsandbits/lang/en_us.lang index 7908d4f7..f0345350 100644 --- a/src/main/resources/assets/chiselsandbits/lang/en_us.lang +++ b/src/main/resources/assets/chiselsandbits/lang/en_us.lang @@ -82,6 +82,9 @@ mod.chiselsandbits.other.pickbit=Pick Bit mod.chiselsandbits.other.offgrid=Place Off Grid mod.chiselsandbits.other.add_to_clipboard=Pick Block to Clipboard +mod.chiselsandbits.other.roll_x=Rotate X Clockwise +mod.chiselsandbits.other.roll_z=Rotate Z Clockwise + mod.chiselsandbits.help.shiftdetails= mod.chiselsandbits.help.empty=Empty mod.chiselsandbits.help.filled=Filled diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/roll_x.png b/src/main/resources/assets/chiselsandbits/textures/icons/roll_x.png new file mode 100644 index 0000000000000000000000000000000000000000..a23db99cfa16a2b0f24dc5078a26e593268a72d5 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxL735kHCP2GC{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QJXPB%t#~Y}o&C|s( z#KM1RUm#zD0*|w;mHLOQx&nnIM`o=x=_))qIpCW3_G`EFb0iMz_;ajHyztKN18u)A z?oV8|`)=t&jR2)hneokrA|5j*TfGd*e(Nsg;;G5%{%Q#~ivuge(^SU)Er&m;GpcU< zqs5?Asnx8>;J3i~NSgxJ7u_UhrpB}`-u(%OOK+7isYS{P{H(ja1Lz_KPgg&ebxsLQ E0BMg}A^-pY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/chiselsandbits/textures/icons/roll_z.png b/src/main/resources/assets/chiselsandbits/textures/icons/roll_z.png new file mode 100644 index 0000000000000000000000000000000000000000..c58b61e652d3b5323d9e077702d93579b6098c58 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxL735kHCP2GC{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QJXPB%t#~Y}o-P6S} z#KM1RUm#zD0*|w$mHLOQx&nnICw$DMT5mkrxn@o8%4@&4GleF6l3!w(u=0DKN&n_r z&*bUbPrcbB