Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Короче у меня есть код NoSlow под сервер SpookyTime.
Мне нужна помощь переписать его под базу Expensive 3.1. Вот код:
А вот код обычного NoSlow в Expensive 3.1:
Мне нужна помощь переписать его под базу Expensive 3.1. Вот код:
Java:
@ModuleInfo(name = "NoSlow", category = Category.MOVEMENT)
public class NoSlow extends Module {
private final ModeSetting mode = new ModeSetting(this, "Режим", "Grim");
private int ticks = 0;
@Subscribe
public void onTick(TickEvent event) {
if (mc.player == null || mc.player.isElytraFlying()) return;
if (mode.is("Grim")) {
if (mc.player.isHandActive()) {
ticks++;
} else {
ticks = 0;
}
}
}
@Subscribe
public void onSlowWalk(SlowWalkingEvent e) {
if (mc.player == null || mc.player.isElytraFlying()) return;
switch (mode.getValue()) {
case "Grim" -> {
if (ticks < 5) {
mc.player.connection.sendPacket(new CClickWindowPacket(
0,
15,
0,
ClickType.PICKUP,
ItemStack.EMPTY,
(short) 0
));
}
if (ticks > 6) e.cancel();
}
}
}
}
А вот код обычного NoSlow в Expensive 3.1:
Java:
package expensive.modules.impl.movement;
import com.google.common.eventbus.Subscribe;
import expensive.events.EventUpdate;
import expensive.events.NoSlowEvent;
import expensive.modules.api.Category;
import expensive.modules.api.Function;
import expensive.modules.api.FunctionRegister;
import expensive.modules.api.impl.ModeSetting;
import expensive.util.misc.player.MoveUtils;
import lombok.ToString;
import net.minecraft.item.Items;
import net.minecraft.item.UseAction;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
@ToString
@FunctionRegister(name = "NoSlow", type = Category.Movement)
public class NoSlow extends Function {
private final ModeSetting mode = new ModeSetting("Мод", "Matrix", "Matrix", "Grim");
public NoSlow() {
addSettings(mode);
}
int ticks = 0;
@Subscribe
public void onUpdate(EventUpdate e) {
if (mc.player.isHandActive()) {
ticks++;
} else {
ticks = 0;
}
}
@Subscribe
public void onEating(NoSlowEvent e) {
handleEventUpdate(e);
}
private void handleEventUpdate(NoSlowEvent eventNoSlow) {
if (mc.player.isHandActive()) {
switch (mode.get()) {
case "Grim" -> handleGrimACMode(eventNoSlow);
case "Matrix" -> handleMatrixMode(eventNoSlow);
}
}
}
private void handleMatrixMode(NoSlowEvent eventNoSlow) {
boolean isFalling = (double) mc.player.fallDistance > 0.725;
float speedMultiplier;
eventNoSlow.cancel();
if (mc.player.isOnGround() && !mc.player.movementInput.jump) {
if (mc.player.ticksExisted % 2 == 0) {
boolean isNotStrafing = mc.player.moveStrafing == 0.0F;
speedMultiplier = isNotStrafing ? 0.5F : 0.4F;
mc.player.motion.x *= speedMultiplier;
mc.player.motion.z *= speedMultiplier;
}
} else if (isFalling) {
boolean isVeryFastFalling = (double) mc.player.fallDistance > 1.4;
speedMultiplier = isVeryFastFalling ? 0.95F : 0.97F;
mc.player.motion.x *= speedMultiplier;
mc.player.motion.z *= speedMultiplier;
}
}
private void handleGrimACMode(NoSlowEvent noSlow) {
boolean offHandActive = mc.player.isHandActive() && mc.player.getActiveHand() == Hand.OFF_HAND;
boolean mainHandActive = mc.player.isHandActive() && mc.player.getActiveHand() == Hand.MAIN_HAND;
if (!(mc.player.getItemInUseCount() < 25 && mc.player.getItemInUseCount() > 4) && mc.player.getHeldItemOffhand().getItem() != Items.SHIELD) {
return;
}
if (mc.player.isHandActive() && !mc.player.isPassenger()) {
mc.playerController.syncCurrentPlayItem();
if (offHandActive && !mc.player.getCooldownTracker().hasCooldown(mc.player.getHeldItemOffhand().getItem())) {
int old = mc.player.inventory.currentItem;
mc.player.connection.sendPacket(new CHeldItemChangePacket(old + 1 > 8 ? old - 1 : old + 1));
mc.player.connection.sendPacket(new CHeldItemChangePacket(mc.player.inventory.currentItem));
mc.player.setSprinting(false);
noSlow.cancel();
}
if (mainHandActive && !mc.player.getCooldownTracker().hasCooldown(mc.player.getHeldItemMainhand().getItem())) {
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.OFF_HAND));
if (mc.player.getHeldItemOffhand().getUseAction().equals(UseAction.NONE)) {
noSlow.cancel();
}
}
mc.playerController.syncCurrentPlayItem();
}
}
private void sendItemChangePacket() {
if (MoveUtils.isMoving()) {
mc.player.connection.sendPacket(new CHeldItemChangePacket((mc.player.inventory.currentItem % 8 + 1)));
mc.player.connection.sendPacket(new CHeldItemChangePacket(mc.player.inventory.currentItem));
}
}
private boolean canCancel() {
boolean isHandActive = mc.player.isHandActive();
boolean isLevitation = mc.player.isPotionActive(Effects.LEVITATION);
boolean isOnGround = mc.player.isOnGround();
boolean isJumpPressed = mc.gameSettings.keyBindJump.pressed;
boolean isElytraFlying = mc.player.isElytraFlying();
if (isLevitation || isElytraFlying) {
return false;
}
return (isOnGround || isJumpPressed) && isHandActive;
}
}