2019-10-27 15:45:44 +00:00
package me.rigamortis.seppuku.impl.module.world ;
import me.rigamortis.seppuku.api.event.EventStageable ;
2019-11-29 23:45:01 +00:00
import me.rigamortis.seppuku.api.event.player.EventClickBlock ;
import me.rigamortis.seppuku.api.event.player.EventPlayerDamageBlock ;
import me.rigamortis.seppuku.api.event.player.EventPlayerUpdate ;
import me.rigamortis.seppuku.api.event.player.EventResetBlockRemoving ;
2019-10-27 15:45:44 +00:00
import me.rigamortis.seppuku.api.module.Module ;
2019-11-30 00:31:05 +00:00
import me.rigamortis.seppuku.api.value.Value ;
2019-10-27 15:45:44 +00:00
import net.minecraft.block.Block ;
import net.minecraft.block.state.IBlockState ;
import net.minecraft.client.Minecraft ;
import net.minecraft.network.play.client.CPacketPlayerDigging ;
import net.minecraft.util.EnumHand ;
import net.minecraft.util.math.BlockPos ;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener ;
/ * *
* Author Seth
* 4 / 24 / 2019 @ 12 : 16 PM .
* /
public final class SpeedMineModule extends Module {
2019-11-30 00:31:05 +00:00
public final Value < Mode > mode = new Value < Mode > ( " Mode " , new String [ ] { " Mode " , " M " } , " The speed-mine mode to use. " , Mode . PACKET ) ;
2019-10-27 15:45:44 +00:00
2019-11-30 00:31:05 +00:00
private enum Mode {
PACKET , DAMAGE , INSTANT
}
public final Value < Boolean > reset = new Value < Boolean > ( " Reset " , new String [ ] { " Res " } , " Stops current block destroy damage from resetting if enabled. " , true ) ;
public final Value < Boolean > doubleBreak = new Value < Boolean > ( " DoubleBreak " , new String [ ] { " DoubleBreak " , " Double " , " DB " } , " Mining a block will also mine the block above it, if enabled. " , false ) ;
2019-10-27 15:45:44 +00:00
public SpeedMineModule ( ) {
super ( " SpeedMine " , new String [ ] { " FastMine " } , " Allows you to break blocks faster " , " NONE " , - 1 , ModuleType . WORLD ) ;
}
@Override
public String getMetaData ( ) {
2019-11-30 00:31:05 +00:00
return this . mode . getValue ( ) . name ( ) ;
2019-10-27 15:45:44 +00:00
}
@Listener
public void onUpdate ( EventPlayerUpdate event ) {
if ( event . getStage ( ) = = EventStageable . EventStage . PRE ) {
Minecraft . getMinecraft ( ) . playerController . blockHitDelay = 0 ;
2019-11-30 00:31:05 +00:00
if ( this . reset . getValue ( ) & & Minecraft . getMinecraft ( ) . gameSettings . keyBindUseItem . isKeyDown ( ) ) {
2019-10-27 15:45:44 +00:00
Minecraft . getMinecraft ( ) . playerController . isHittingBlock = false ;
}
}
}
@Listener
public void resetBlockDamage ( EventResetBlockRemoving event ) {
2019-11-30 00:31:05 +00:00
if ( this . reset . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
event . setCanceled ( true ) ;
}
}
@Listener
public void clickBlock ( EventClickBlock event ) {
2019-11-30 00:31:05 +00:00
if ( this . reset . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
if ( Minecraft . getMinecraft ( ) . playerController . curBlockDamageMP > 0 . 1f ) {
Minecraft . getMinecraft ( ) . playerController . isHittingBlock = true ;
}
}
}
@Listener
public void damageBlock ( EventPlayerDamageBlock event ) {
if ( canBreak ( event . getPos ( ) ) ) {
final Minecraft mc = Minecraft . getMinecraft ( ) ;
2019-11-30 00:31:05 +00:00
if ( this . reset . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
mc . playerController . isHittingBlock = false ;
}
2019-11-30 00:31:05 +00:00
switch ( this . mode . getValue ( ) ) {
case PACKET :
2019-10-27 15:45:44 +00:00
mc . player . swingArm ( EnumHand . MAIN_HAND ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . START_DESTROY_BLOCK , event . getPos ( ) , event . getFace ( ) ) ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . STOP_DESTROY_BLOCK , event . getPos ( ) , event . getFace ( ) ) ) ;
event . setCanceled ( true ) ;
break ;
2019-11-30 00:31:05 +00:00
case DAMAGE :
2019-10-27 15:45:44 +00:00
if ( mc . playerController . curBlockDamageMP > = 0 . 7f ) {
mc . playerController . curBlockDamageMP = 1 . 0f ;
}
break ;
2019-11-30 00:31:05 +00:00
case INSTANT :
2019-10-27 15:45:44 +00:00
mc . player . swingArm ( EnumHand . MAIN_HAND ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . START_DESTROY_BLOCK , event . getPos ( ) , event . getFace ( ) ) ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . STOP_DESTROY_BLOCK , event . getPos ( ) , event . getFace ( ) ) ) ;
mc . playerController . onPlayerDestroyBlock ( event . getPos ( ) ) ;
mc . world . setBlockToAir ( event . getPos ( ) ) ;
break ;
}
}
2019-11-30 00:31:05 +00:00
if ( this . doubleBreak . getValue ( ) ) {
2019-10-27 15:45:44 +00:00
final BlockPos above = event . getPos ( ) . add ( 0 , 1 , 0 ) ;
final Minecraft mc = Minecraft . getMinecraft ( ) ;
if ( canBreak ( above ) & & mc . player . getDistance ( above . getX ( ) , above . getY ( ) , above . getZ ( ) ) < = 5f ) {
mc . player . swingArm ( EnumHand . MAIN_HAND ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . START_DESTROY_BLOCK , above , event . getFace ( ) ) ) ;
mc . player . connection . sendPacket ( new CPacketPlayerDigging ( CPacketPlayerDigging . Action . STOP_DESTROY_BLOCK , above , event . getFace ( ) ) ) ;
mc . playerController . onPlayerDestroyBlock ( above ) ;
mc . world . setBlockToAir ( above ) ;
}
}
}
private boolean canBreak ( BlockPos pos ) {
final IBlockState blockState = Minecraft . getMinecraft ( ) . world . getBlockState ( pos ) ;
final Block block = blockState . getBlock ( ) ;
return block . getBlockHardness ( blockState , Minecraft . getMinecraft ( ) . world , pos ) ! = - 1 ;
}
}