下面列出了net.minecraft.util.shape.VoxelShape#net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onSentPacket(PacketOutputEvent event)
{
if(!(event.getPacket() instanceof PlayerMoveC2SPacket))
return;
event.cancel();
PlayerMoveC2SPacket packet = (PlayerMoveC2SPacket)event.getPacket();
PlayerMoveC2SPacket prevPacket = packets.peekLast();
if(prevPacket != null && packet.isOnGround() == prevPacket.isOnGround()
&& packet.getYaw(-1) == prevPacket.getYaw(-1)
&& packet.getPitch(-1) == prevPacket.getPitch(-1)
&& packet.getX(-1) == prevPacket.getX(-1)
&& packet.getY(-1) == prevPacket.getY(-1)
&& packet.getZ(-1) == prevPacket.getZ(-1))
return;
packets.addLast(packet);
}
@Subscribe
public void onTick(EventTick event) {
if (mc.player.fallDistance > 2f && getSettings().get(0).toMode().mode == 0) {
if (mc.player.isFallFlying()) return;
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
}
if (mc.player.fallDistance > 2f && getSettings().get(0).toMode().mode == 1 &&
mc.world.getBlockState(mc.player.getBlockPos().add(
0,-1.5+(mc.player.getVelocity().y*0.1),0)).getBlock() != Blocks.AIR) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(false));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(
mc.player.getX(), mc.player.getY() - 420.69, mc.player.getZ(), true));
mc.player.fallDistance = 0;
}
}
@Subscribe
public void onTick(EventTick event) {
if (mc.player.fallDistance > 2f && getSettings().get(0).toMode().mode == 0) {
if (mc.player.isFallFlying()) return;
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
}
if (mc.player.fallDistance > 2f && getSettings().get(0).toMode().mode == 1 &&
mc.world.getBlockState(mc.player.getBlockPos().add(
0,-1.5+(mc.player.getVelocity().y*0.1),0)).getBlock() != Blocks.AIR) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(false));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(
mc.player.getX(), mc.player.getY() - 420.69, mc.player.getZ(), true));
mc.player.fallDistance = 0;
}
}
@Override
public void onUpdate()
{
ClientPlayerEntity player = MC.player;
if(player.fallDistance <= 2)
return;
player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
}
@Override
public void onUpdate()
{
float yaw = MC.player.yaw + random.nextFloat() * 360F - 180F;
float pitch = random.nextFloat() * 180F - 90F;
MC.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookOnly(
yaw, pitch, MC.player.isOnGround()));
}
@Override
public void onUpdate()
{
float timer = MC.player.age % 20 / 10F;
float pitch = MathHelper.sin(timer * (float)Math.PI) * 90F;
MC.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookOnly(
MC.player.yaw, pitch, MC.player.isOnGround()));
}
@Override
public List<PacketInfo<?>> getServerboundPackets() {
List<PacketInfo<?>> packets = super.getServerboundPackets();
remove(packets, PlaceRecipeC2SPacket_1_12.class);
remove(packets, PlayerMoveC2SPacket.class);
insertAfter(packets, PlayerMoveC2SPacket.LookOnly.class, PacketInfo.of(PlayerMoveC2SPacket.class, PlayerMoveC2SPacket::new));
remove(packets, RecipeBookDataC2SPacket.class);
remove(packets, AdvancementTabC2SPacket.class);
insertAfter(packets, ClientStatusC2SPacket.class, PacketInfo.of(ClientStatusC2SPacket_1_11_2.class, ClientStatusC2SPacket_1_11_2::new));
remove(packets, ClientStatusC2SPacket.class);
return packets;
}
@Subscribe
public void onTick(EventTick event) {
for (int i = 0; i < getSettings().get(0).toSlider().getValue(); i++) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(Math.random() >= 0.5));
mc.player.networkHandler.sendPacket(new KeepAliveC2SPacket((int) (Math.random() * 8)));
}
}
private void doCritical() {
if (!mc.player.isOnGround()) return;
if (mc.player.isInLava() || mc.player.isTouchingWater()) return;
double posX = mc.player.getX();
double posY = mc.player.getY();
double posZ = mc.player.getZ();
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(posX, posY + 0.0625, posZ, true));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(posX, posY, posZ, false));
}
@Subscribe
public void onTick(EventTick event) {
if (!WorldUtils.NONSOLID_BLOCKS.contains(
mc.world.getBlockState(mc.player.getBlockPos().add(0, mc.player.getHeight()+1, 0)).getBlock())) return;
if (getSettings().get(0).toMode().mode == 0) {
mc.player.stepHeight = 1.065F;
} else if (getSettings().get(0).toMode().mode == 1) {
if (!mc.player.horizontalCollision && flag) {
mc.player.setVelocity(mc.player.getVelocity().x, -0.1, mc.player.getVelocity().z);
} else if (mc.player.horizontalCollision) {
mc.player.setVelocity(mc.player.getVelocity().x, 1, mc.player.getVelocity().z);
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
mc.player.jump();
flag = true;
}
if (!mc.player.horizontalCollision) flag = false;
} else if (getSettings().get(0).toMode().mode == 2) {
if (mc.player.horizontalCollision && mc.player.isOnGround()) {
pos = mc.player.getY();
mc.player.jump();
flag = true;
}
if (flag && pos + 1.065 < mc.player.getY()) {
mc.player.setVelocity(mc.player.getVelocity().x, -0.1, mc.player.getVelocity().z);
flag = false;
}
}
}
@Subscribe
public void onTick(EventTick event) {
float speed = (float) getSettings().get(1).toSlider().getValue();
if (mc.player.age % 20 == 0 && getSettings().get(2).toMode().mode == 3 && !(getSettings().get(0).toMode().mode == 2)) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(mc.player.getX(), mc.player.getY() - 0.06, mc.player.getZ(), false));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(mc.player.getX(), mc.player.getZ() + 0.06, mc.player.getZ(), true));
}
if (getSettings().get(0).toMode().mode == 0) {
mc.player.abilities.setFlySpeed(speed / 10);
mc.player.abilities.allowFlying = true;
mc.player.abilities.flying = true;
} else if (getSettings().get(0).toMode().mode == 1) {
if (getSettings().get(2).toMode().mode == 0 || getSettings().get(2).toMode().mode == 3) mc.player.setVelocity(0, 0, 0);
else if (getSettings().get(2).toMode().mode == 1 && WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPos().getX(), mc.player.getPos().getY() - 0.069, mc.player.getPos().getZ())).getBlock())) mc.player.setVelocity(0, mc.player.age % 20 == 0 ? -0.069 : 0, 0);
else if (getSettings().get(2).toMode().mode == 2) mc.player.setVelocity(0, mc.player.age % 40 == 0 ? (WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPos().getX(), mc.player.getPos().getY() + 1.15, mc.player.getPos().getZ())).getBlock()) ? 0.15 : 0) : mc.player.age % 20 == 0 ? (WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPos().getX(), mc.player.getPos().getY() - 0.15, mc.player.getPos().getZ())).getBlock()) ? -0.15 : 0) : 0, 0);
Vec3d forward = new Vec3d(0, 0, speed).rotateY(-(float) Math.toRadians(mc.player.yaw));
Vec3d strafe = forward.rotateY((float) Math.toRadians(90));
if (mc.options.keyJump.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(0, speed, 0));
if (mc.options.keySneak.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(0, -speed, 0));
if (mc.options.keyBack.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(-forward.x, 0, -forward.z));
if (mc.options.keyForward.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(forward.x, 0, forward.z));
if (mc.options.keyLeft.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(strafe.x, 0, strafe.z));
if (mc.options.keyRight.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(-strafe.x, 0, -strafe.z));
} else if (getSettings().get(0).toMode().mode == 2) {
if (!mc.options.keyJump.isPressed()) return;
mc.player.setVelocity(mc.player.getVelocity().x, speed / 3, mc.player.getVelocity().z);
}
}
@Subscribe
public void sendPacket(EventSendPacket event) {
if (!(event.getPacket() instanceof PlayerMoveC2SPacket
|| event.getPacket() instanceof PlayerMoveC2SPacket.PositionOnly
|| event.getPacket() instanceof PlayerMoveC2SPacket.LookOnly
|| event.getPacket() instanceof PlayerMoveC2SPacket.Both)) return;
queue.add((PlayerMoveC2SPacket) event.getPacket());
event.setCancelled(true);
}
public void sendPackets() {
for (PlayerMoveC2SPacket p: new ArrayList<>(queue)) {
if (p instanceof PlayerMoveC2SPacket.LookOnly) continue;
mc.player.networkHandler.sendPacket(p);
}
queue.clear();
}
@Subscribe
public void onTick(EventTick event) {
for (int i = 0; i < getSettings().get(0).toSlider().getValue(); i++) {
mc.player.networkHandler.sendPacket(new PlayerActionC2SPacket(Action.SWAP_ITEM_WITH_OFFHAND, BlockPos.ORIGIN, Direction.UP));
if (getSettings().get(1).toToggle().state) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
}
}
@Subscribe
public void onTick(EventTick event) {
for (int i = 0; i < getSettings().get(0).toSlider().getValue(); i++) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(Math.random() >= 0.5));
mc.player.networkHandler.sendPacket(new KeepAliveC2SPacket((int) (Math.random() * 8)));
}
}
private void doCritical() {
if (!mc.player.onGround) return;
if (mc.player.isInLava() || mc.player.isTouchingWater()) return;
double posX = mc.player.getX();
double posY = mc.player.getY();
double posZ = mc.player.getZ();
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(posX, posY + 0.0625, posZ, true));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(posX, posY, posZ, false));
}
@Subscribe
public void onTick(EventTick event) {
if (!WorldUtils.NONSOLID_BLOCKS.contains(
mc.world.getBlockState(mc.player.getBlockPos().add(0, mc.player.getHeight()+1, 0)).getBlock())) return;
if (getSettings().get(0).toMode().mode == 0) {
mc.player.stepHeight = 1.065F;
} else if (getSettings().get(0).toMode().mode == 1) {
if (!mc.player.horizontalCollision && flag) {
mc.player.setVelocity(mc.player.getVelocity().x, -0.1, mc.player.getVelocity().z);
} else if (mc.player.horizontalCollision) {
mc.player.setVelocity(mc.player.getVelocity().x, 1, mc.player.getVelocity().z);
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
mc.player.jump();
flag = true;
}
if (!mc.player.horizontalCollision) flag = false;
} else if (getSettings().get(0).toMode().mode == 2) {
if (mc.player.horizontalCollision && mc.player.onGround) {
pos = mc.player.getY();
mc.player.jump();
flag = true;
}
if (flag && pos + 1.065 < mc.player.getY()) {
mc.player.setVelocity(mc.player.getVelocity().x, -0.1, mc.player.getVelocity().z);
flag = false;
}
}
}
@Subscribe
public void onTick(EventTick event) {
float speed = (float) getSettings().get(1).toSlider().getValue();
if (mc.player.age % 20 == 0 && getSettings().get(2).toMode().mode == 3 && !(getSettings().get(0).toMode().mode == 2)) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(mc.player.getX(), mc.player.getY() - 0.06, mc.player.getZ(), false));
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionOnly(mc.player.getX(), mc.player.getZ() + 0.06, mc.player.getZ(), true));
}
if (getSettings().get(0).toMode().mode == 0) {
mc.player.abilities.setFlySpeed(speed / 10);
mc.player.abilities.allowFlying = true;
mc.player.abilities.flying = true;
} else if (getSettings().get(0).toMode().mode == 1) {
if (getSettings().get(2).toMode().mode == 0 || getSettings().get(2).toMode().mode == 3) mc.player.setVelocity(0, 0, 0);
else if (getSettings().get(2).toMode().mode == 1 && WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPosVector().getX(), mc.player.getPosVector().getY() - 0.069, mc.player.getPosVector().getZ())).getBlock())) mc.player.setVelocity(0, mc.player.age % 20 == 0 ? -0.069 : 0, 0);
else if (getSettings().get(2).toMode().mode == 2) mc.player.setVelocity(0, mc.player.age % 40 == 0 ? (WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPosVector().getX(), mc.player.getPosVector().getY() + 1.15, mc.player.getPosVector().getZ())).getBlock()) ? 0.15 : 0) : mc.player.age % 20 == 0 ? (WorldUtils.NONSOLID_BLOCKS.contains(mc.world.getBlockState(new BlockPos(mc.player.getPosVector().getX(), mc.player.getPosVector().getY() - 0.15, mc.player.getPosVector().getZ())).getBlock()) ? -0.15 : 0) : 0, 0);
Vec3d forward = new Vec3d(0, 0, speed).rotateY(-(float) Math.toRadians(mc.player.yaw));
Vec3d strafe = forward.rotateY((float) Math.toRadians(90));
if (mc.options.keyJump.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(0, speed, 0));
if (mc.options.keySneak.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(0, -speed, 0));
if (mc.options.keyBack.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(-forward.x, 0, -forward.z));
if (mc.options.keyForward.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(forward.x, 0, forward.z));
if (mc.options.keyLeft.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(strafe.x, 0, strafe.z));
if (mc.options.keyRight.isPressed()) mc.player.setVelocity(mc.player.getVelocity().add(-strafe.x, 0, -strafe.z));
} else if (getSettings().get(0).toMode().mode == 2) {
if (!mc.options.keyJump.isPressed()) return;
mc.player.setVelocity(mc.player.getVelocity().x, speed / 3, mc.player.getVelocity().z);
}
}
@Subscribe
public void sendPacket(EventSendPacket event) {
if (!(event.getPacket() instanceof PlayerMoveC2SPacket
|| event.getPacket() instanceof PlayerMoveC2SPacket.PositionOnly
|| event.getPacket() instanceof PlayerMoveC2SPacket.LookOnly
|| event.getPacket() instanceof PlayerMoveC2SPacket.Both)) return;
queue.add((PlayerMoveC2SPacket) event.getPacket());
event.setCancelled(true);
}
public void sendPackets() {
for (PlayerMoveC2SPacket p: new ArrayList<>(queue)) {
if (p instanceof PlayerMoveC2SPacket.LookOnly) continue;
mc.player.networkHandler.sendPacket(p);
}
queue.clear();
}
@Subscribe
public void onTick(EventTick event) {
for (int i = 0; i < getSettings().get(0).toSlider().getValue(); i++) {
mc.player.networkHandler.sendPacket(new PlayerActionC2SPacket(Action.SWAP_HELD_ITEMS, BlockPos.ORIGIN, Direction.UP));
if (getSettings().get(1).toToggle().state) mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket(true));
}
}
@Inject(method = "onPlayerMove", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;jump()V"
))
private void onJump(PlayerMoveC2SPacket playerMoveC2SPacket_1, CallbackInfo ci)
{
PLAYER_JUMPS.onPlayerEvent(player);
}
@Inject(method = "onPlayerMove", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;isSleeping()Z",
shift = At.Shift.BEFORE
))
private void checkMove(PlayerMoveC2SPacket p, CallbackInfo ci)
{
double movedBy = player.getPos().squaredDistanceTo(lastTickX, lastTickY, lastTickZ);
if (movedBy == 0.0D) return;
// corrective tick
if (movedBy < 0.0009 && lastMoved > 0.0009 && Math.abs(player.getServer().getTicks()-lastMovedTick-20)<2)
{
//CarpetSettings.LOG.error("Corrective movement packet");
return;
}
if (movedBy > 0.0D)
{
//CarpetSettings.LOG.error(String.format(
// "moved by %.6f at %d",
// player.getPos().squaredDistanceTo(lastTickX, lastTickY, lastTickZ),
// player.getServer().getTicks()-lastMovedTick
//));
lastMoved = movedBy;
lastMovedTick = player.getServer().getTicks();
TickSpeed.reset_player_active_timeout();
}
}
@Override
public void onSentPacket(PacketOutputEvent event)
{
if(event.getPacket() instanceof PlayerMoveC2SPacket)
event.cancel();
}
private boolean tryToPlace(BlockPos pos, Vec3d eyesPos, double rangeSq)
{
Vec3d posVec = Vec3d.ofCenter(pos);
double distanceSqPosVec = eyesPos.squaredDistanceTo(posVec);
for(Direction side : Direction.values())
{
BlockPos neighbor = pos.offset(side);
// check if neighbor can be right clicked
if(!BlockUtils.canBeClicked(neighbor)
|| BlockUtils.getState(neighbor).getMaterial().isReplaceable())
continue;
Vec3d dirVec = Vec3d.of(side.getVector());
Vec3d hitVec = posVec.add(dirVec.multiply(0.5));
// check if hitVec is within range
if(eyesPos.squaredDistanceTo(hitVec) > rangeSq)
continue;
// check if side is visible (facing away from player)
if(distanceSqPosVec > eyesPos.squaredDistanceTo(posVec.add(dirVec)))
continue;
// check line of sight
if(checkLOS.isChecked() && MC.world
.rayTrace(new RayTraceContext(eyesPos, hitVec,
RayTraceContext.ShapeType.COLLIDER,
RayTraceContext.FluidHandling.NONE, MC.player))
.getType() != HitResult.Type.MISS)
continue;
// face block
Rotation rotation = RotationUtils.getNeededRotations(hitVec);
PlayerMoveC2SPacket.LookOnly packet =
new PlayerMoveC2SPacket.LookOnly(rotation.getYaw(),
rotation.getPitch(), MC.player.isOnGround());
MC.player.networkHandler.sendPacket(packet);
// place block
IMC.getInteractionManager().rightClickBlock(neighbor,
side.getOpposite(), hitVec);
MC.player.swingHand(Hand.MAIN_HAND);
IMC.setItemUseCooldown(4);
return true;
}
return false;
}
@Override
public void onUpdate()
{
// check gamemode
if(MC.player.abilities.creativeMode)
return;
// check for other players
if(MC.isInSingleplayer()
&& MC.player.networkHandler.getPlayerList().size() == 1)
return;
// check health
if(MC.player.getHealth() > health.getValueF() * 2F)
return;
// leave server
switch(mode.getSelected())
{
case QUIT:
MC.world.disconnect();
break;
case CHARS:
MC.player.networkHandler
.sendPacket(new ChatMessageC2SPacket("\u00a7"));
break;
case TELEPORT:
MC.player.networkHandler.sendPacket(
new PlayerMoveC2SPacket.PositionOnly(3.1e7, 100, 3.1e7, false));
break;
case SELFHURT:
MC.player.networkHandler
.sendPacket(new PlayerInteractEntityC2SPacket(MC.player,
MC.player.isSneaking()));
break;
}
// disable
setEnabled(false);
}
@Override
public void onSentPacket(PacketOutputEvent event)
{
if(event.getPacket() instanceof PlayerMoveC2SPacket)
event.cancel();
}
@Override
public void onSentPacket(PacketOutputEvent event)
{
if(event.getPacket() instanceof PlayerMoveC2SPacket)
event.cancel();
}
@Override
public void onUpdate()
{
// search potion in hotbar
int potionInHotbar = findPotion(0, 9);
// check if any potion was found
if(potionInHotbar != -1)
{
// check timer
if(timer > 0)
{
timer--;
return;
}
// check health
if(MC.player.getHealth() > health.getValueF() * 2F)
return;
// save old slot
int oldSlot = MC.player.inventory.selectedSlot;
// throw potion in hotbar
MC.player.inventory.selectedSlot = potionInHotbar;
MC.player.networkHandler
.sendPacket(new PlayerMoveC2SPacket.LookOnly(MC.player.yaw, 90,
MC.player.isOnGround()));
IMC.getInteractionManager().rightClickItem();
// reset slot and rotation
MC.player.inventory.selectedSlot = oldSlot;
MC.player.networkHandler
.sendPacket(new PlayerMoveC2SPacket.LookOnly(MC.player.yaw,
MC.player.pitch, MC.player.isOnGround()));
// reset timer
timer = 10;
return;
}
// search potion in inventory
int potionInInventory = findPotion(9, 36);
// move potion in inventory to hotbar
if(potionInInventory != -1)
IMC.getInteractionManager()
.windowClick_QUICK_MOVE(potionInInventory);
}
private boolean placeBlockLegit(BlockPos pos)
{
Vec3d eyesPos = RotationUtils.getEyesPos();
Vec3d posVec = Vec3d.ofCenter(pos);
double distanceSqPosVec = eyesPos.squaredDistanceTo(posVec);
for(Direction side : Direction.values())
{
BlockPos neighbor = pos.offset(side);
// check if neighbor can be right clicked
if(!BlockUtils.canBeClicked(neighbor))
continue;
Vec3d dirVec = Vec3d.of(side.getVector());
Vec3d hitVec = posVec.add(dirVec.multiply(0.5));
// check if hitVec is within range (4.25 blocks)
if(eyesPos.squaredDistanceTo(hitVec) > 18.0625)
continue;
// check if side is visible (facing away from player)
if(distanceSqPosVec > eyesPos.squaredDistanceTo(posVec.add(dirVec)))
continue;
// check line of sight
if(MC.world
.rayTrace(new RayTraceContext(eyesPos, hitVec,
RayTraceContext.ShapeType.COLLIDER,
RayTraceContext.FluidHandling.NONE, MC.player))
.getType() != HitResult.Type.MISS)
continue;
// face block
Rotation rotation = RotationUtils.getNeededRotations(hitVec);
PlayerMoveC2SPacket.LookOnly packet =
new PlayerMoveC2SPacket.LookOnly(rotation.getYaw(),
rotation.getPitch(), MC.player.isOnGround());
MC.player.networkHandler.sendPacket(packet);
// place block
IMC.getInteractionManager().rightClickBlock(neighbor,
side.getOpposite(), hitVec);
MC.player.swingHand(Hand.MAIN_HAND);
IMC.setItemUseCooldown(4);
return true;
}
return false;
}