Начинающий
- Статус
- Оффлайн
- Регистрация
- 23 Сен 2024
- Сообщения
- 348
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
Всем привет! Сегодня сливаю вам довольно класную штуку для SwingAnimation, а именно сеттинг сетки!
SS: Прикрепил.
Присутствует ЛГБТ (ГПТ) Код, ну да ладна...
Вот сам сетинг:
А вот сам код Swing Animation:
Надеюсь вам зайдёт! Модеры одобрите паже
SS: Прикрепил.
Присутствует ЛГБТ (ГПТ) Код, ну да ладна...
Вот сам сетинг:
Setting:
package dev.folet.VesencePremium.client.impl.settings.impl;
import com.google.gson.JsonObject;
import lombok.Getter;
import lombok.Setter;
import net.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import dev.folet.common.animation.Animation;
import dev.folet.common.animation.Easings;
import dev.folet.VesencePremium.client.impl.settings.Setting;
import dev.folet.VesencePremium.client.util.color.ColorUtil;
import dev.folet.VesencePremium.client.util.color.theme.Theme;
import dev.folet.VesencePremium.client.util.render.shape.Round;
import dev.folet.VesencePremium.client.util.render.shape.Shape;
import java.time.Duration;
import java.util.function.Supplier;
public class PositionSetting extends Setting<Float> {
@Getter
private float x;
@Getter
private float y;
private final float minX;
private final float maxX;
private final float minY;
private final float maxY;
private final float defaultX;
private final float defaultY;
private boolean dragging = false;
private final Animation animatedX = new Animation()
.duration(Duration.ofMillis(100))
.easing(Easings.CUBIC_OUT);
private final Animation animatedY = new Animation()
.duration(Duration.ofMillis(100))
.easing(Easings.CUBIC_OUT);
private final Animation hoverAnimation = new Animation()
.duration(Duration.ofMillis(200))
.easing(Easings.CUBIC_OUT);
private final Animation dragAnimation = new Animation()
.duration(Duration.ofMillis(150))
.easing(Easings.CUBIC_OUT);
private final Animation resetButtonHover = new Animation()
.duration(Duration.ofMillis(150))
.easing(Easings.CUBIC_OUT);
public PositionSetting(String name, float defaultX, float defaultY) {
this(name, defaultX, defaultY, -2.5F, 2.5F, -2.0F, 2.0F);
}
public PositionSetting(String name, float defaultX, float defaultY, float minX, float maxX, float minY, float maxY) {
super(name, 0.0F);
this.x = defaultX;
this.y = defaultY;
this.defaultX = defaultX;
this.defaultY = defaultY;
this.minX = minX;
this.maxX = maxX;
this.minY = minY;
this.maxY = maxY;
this.animatedX.set(defaultX);
this.animatedY.set(defaultY);
}
public static PositionSetting of(String name, float defaultX, float defaultY) {
return new PositionSetting(name, defaultX, defaultY);
}
public void setPosition(float x, float y) {
this.x = clamp(x, minX, maxX);
this.y = clamp(y, minY, maxY);
this.animatedX.run(this.x);
this.animatedY.run(this.y);
if (onAction() != null) {
onAction().run();
}
}
public void reset() {
setPosition(defaultX, defaultY);
}
@Override
public PositionSetting visible(Supplier<Boolean> visible) {
super.visible(visible);
return this;
}
@Override
public PositionSetting onAction(Runnable onAction) {
super.onAction(onAction);
return this;
}
@Override
public void init() {
super.init();
hoverAnimation.run(0F);
dragAnimation.run(0F);
resetButtonHover.run(0F);
animatedX.set(x);
animatedY.set(y);
}
@Override
public void render(MatrixStack matrix, int mouseX, int mouseY, float partialTicks) {
super.render(matrix, mouseX, mouseY, partialTicks);
if (!visible().get()) return;
hoverAnimation.update();
dragAnimation.update();
resetButtonHover.update();
animatedX.update();
animatedY.update();
float controlSize = 80F;
float gridSize = 70F;
float circleRadius = 6F;
float startX = position().x + margin();
float startY = position().y + padding();
float nameWidth = font().getWidth(name(), fontSize());
font().draw(matrix, name(), startX, startY + 2, Theme.DEFAULT.text(alpha()), fontSize());
float controlX = position().x + size().x - margin() - controlSize;
float controlY = startY;
Shape background = new Shape(matrix, controlX, controlY, controlSize, controlSize);
int bgColor = ColorUtil.getColor(32, 0.5F * alpha());
int outlineColor = ColorUtil.overCol(
ColorUtil.getColor(64, 0.5F * alpha()),
Theme.DEFAULT.accent(0.3F * alpha()),
hoverAnimation.get()
);
background.round(bgColor, Round.of(4));
background.outline(0.5F, outlineColor, Round.of(4));
float gridStartX = controlX + (controlSize - gridSize) / 2F;
float gridStartY = controlY + (controlSize - gridSize) / 2F;
int gridColor = ColorUtil.getColor(64, 0.3F * alpha());
for (int i = 0; i <= 4; i++) {
float lineX = gridStartX + (gridSize / 4F) * i;
new Shape(matrix, lineX, gridStartY, 0.5F, gridSize)
.round(gridColor, Round.zero());
}
for (int i = 0; i <= 4; i++) {
float lineY = gridStartY + (gridSize / 4F) * i;
new Shape(matrix, gridStartX, lineY, gridSize, 0.5F)
.round(gridColor, Round.zero());
}
float centerX = gridStartX + gridSize / 2F;
float centerY = gridStartY + gridSize / 2F;
new Shape(matrix, centerX - 3, centerY - 0.5F, 6, 1)
.round(ColorUtil.getColor(200, 0.7F * alpha()), Round.of(0.5F));
new Shape(matrix, centerX - 0.5F, centerY - 3, 1, 6)
.round(ColorUtil.getColor(200, 0.7F * alpha()), Round.of(0.5F));
font().draw(matrix, "0", centerX + 5, centerY - 2, ColorUtil.getColor(200, 0.6F * alpha()), 6F);
float normalizedX = (animatedX.get() - minX) / (maxX - minX);
float normalizedY = (animatedY.get() - minY) / (maxY - minY);
float circleX = gridStartX + normalizedX * gridSize;
float circleY = gridStartY + (1F - normalizedY) * gridSize;
int lineColor = ColorUtil.getColor(96, 0.4F * alpha());
new Shape(matrix, centerX, centerY, circleX - centerX, 0.5F)
.round(lineColor, Round.zero());
new Shape(matrix, circleX, centerY, 0.5F, circleY - centerY)
.round(lineColor, Round.zero());
float currentRadius = circleRadius + dragAnimation.get() * 2F;
Shape circle = new Shape(matrix,
circleX - currentRadius,
circleY - currentRadius,
currentRadius * 2,
currentRadius * 2
);
int circleColor = ColorUtil.overCol(
Theme.DEFAULT.accent(0.7F * alpha()),
Theme.DEFAULT.accent(1.0F * alpha()),
dragAnimation.get()
);
circle.round(circleColor, Round.of(currentRadius));
circle.outline(1F, Theme.DEFAULT.accent(alpha()), Round.of(currentRadius - 0.5F));
String valueText = String.format("X: %.2f Y: %.2f", x, y);
float textWidth = font().getWidth(valueText, 6F);
font().draw(matrix, valueText,
controlX + (controlSize - textWidth) / 2F,
controlY + controlSize + 4,
Theme.DEFAULT.text(0.7F * alpha()),
6F
);
height(padding() + controlSize + 12 + padding());
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (!visible().get()) return false;
float controlSize = 80F;
float controlX = position().x + size().x - margin() - controlSize;
float controlY = position().y + padding();
if (isHover(mouseX, mouseY, controlX, controlY, controlSize, controlSize)) {
if (isLClick(button)) {
dragging = true;
dragAnimation.run(1F);
updatePositionFromMouse(mouseX, mouseY);
return true;
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (dragging && isLClick(button)) {
dragging = false;
dragAnimation.run(0F);
return true;
}
return super.mouseReleased(mouseX, mouseY, button);
}
@Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) {
if (dragging) {
updatePositionFromMouse(mouseX, mouseY);
return true;
}
return super.mouseDragged(mouseX, mouseY, button, dragX, dragY);
}
@Override
public void mouseMoved(double mouseX, double mouseY) {
super.mouseMoved(mouseX, mouseY);
if (!visible().get()) return;
float controlSize = 80F;
float controlX = position().x + size().x - margin() - controlSize;
float controlY = position().y + padding();
boolean hover = isHover(mouseX, mouseY, controlX, controlY, controlSize, controlSize);
hoverAnimation.run(hover ? 1F : 0F);
}
private void updatePositionFromMouse(double mouseX, double mouseY) {
float controlSize = 80F;
float gridSize = 70F;
float controlX = position().x + size().x - margin() - controlSize;
float controlY = position().y + padding();
float gridStartX = controlX + (controlSize - gridSize) / 2F;
float gridStartY = controlY + (controlSize - gridSize) / 2F;
float relativeX = (float) (mouseX - gridStartX);
float relativeY = (float) (mouseY - gridStartY);
relativeX = clamp(relativeX, 0, gridSize);
relativeY = clamp(relativeY, 0, gridSize);
float normalizedX = relativeX / gridSize;
float normalizedY = 1F - (relativeY / gridSize);
float newX = minX + normalizedX * (maxX - minX);
float newY = minY + normalizedY * (maxY - minY);
setPosition(newX, newY);
}
private float clamp(float value, float min, float max) {
return Math.max(min, Math.min(max, value));
}
@Override
public void save(JsonObject object) {
JsonObject positionObject = new JsonObject();
positionObject.addProperty("x", x);
positionObject.addProperty("y", y);
object.add(name(), positionObject);
}
@Override
public void load(JsonObject object) {
if (object.has(name())) {
JsonObject positionObject = object.getAsJsonObject(name());
if (positionObject.has("x") && positionObject.has("y")) {
this.x = positionObject.get("x").getAsFloat();
this.y = positionObject.get("y").getAsFloat();
}
}
}
}
Swings:
package dev.folet.VesencePremium.client.impl.feature.impl.render;
import lombok.Getter;
import lombok.experimental.Accessors;
import net.blaze3d.matrix.MatrixStack;
import net.minecraft.util.HandSide;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Quaternion;
import net.minecraft.util.math.vector.Vector3f;
import dev.folet.common.animation.Animation;
import dev.folet.common.animation.Easings;
import dev.folet.common.animation.OldAnimation;
import dev.folet.common.events.orbit.EventHandler;
import dev.folet.VesencePremium.client.Client;
import dev.folet.VesencePremium.client.events.render.RenderItemEvent;
import dev.folet.VesencePremium.client.impl.feature.Category;
import dev.folet.VesencePremium.client.impl.feature.Feature;
import dev.folet.VesencePremium.client.impl.feature.FeatureInfo;
import dev.folet.VesencePremium.client.impl.feature.impl.combat.AttackAura;
import dev.folet.VesencePremium.client.impl.settings.impl.BooleanSetting;
import dev.folet.VesencePremium.client.impl.settings.impl.ModeSetting;
import dev.folet.VesencePremium.client.impl.settings.impl.SliderSetting;
import dev.folet.VesencePremium.client.impl.settings.impl.PositionSetting;
import dev.folet.VesencePremium.client.util.math.StopWatch;
import dev.folet.VesencePremium.client.util.other.Instance;
@Getter
@Accessors(fluent = true)
@FeatureInfo(name = "SwingAnimations", description = "Изменяет-улучшает анимации и расположение ваших рук от первого лица", category = Category.RENDER)
public class SwingAnimations extends Feature {
private final ModeSetting mode = new ModeSetting("Режим", "Стандарт", "Взмах", "Взмах 2", "Сдвиг", "Ломание", "Выпад", "Копьё", "Вниз", "Желе", "Тряска").set("Взмах");
private final BooleanSetting translate = new BooleanSetting("Перемещение по экрану", false);
private final BooleanSetting attackAuraOnly = new BooleanSetting("Только с киллкой", false);
private final BooleanSetting attackAuraOffsetsOnly = new BooleanSetting("Оффсеты только с киллкой", false).visible(translate::get);
private final PositionSetting rightHandPosition = new PositionSetting("Позиция правой руки", -45, 0.0F).visible(translate::get);
private final SliderSetting rightOffsetZ = new SliderSetting("Правая рука Z", 0.0F, -1.5F, 0.0f, 0.05F).visible(translate::get);
private final PositionSetting leftHandPosition = new PositionSetting("Позиция левой руки", 0.0F, 0.0F).visible(translate::get);
private final SliderSetting leftOffsetZ = new SliderSetting("Левая рука Z", 0.0F, -1.5F, 0.0F, 0.05F).visible(translate::get);
private final SliderSetting offsetX = new SliderSetting("Оффсет X", 0.0F, 0.0F, 1.25F, 0.05F).visible(() -> false);
private final SliderSetting offsetY = new SliderSetting("Оффсет Y", 0.0F, -0.7F, 1.25F, 0.05F).visible(() -> false);
private final SliderSetting offsetZ = new SliderSetting("Оффсет Z", 0.0F, -1.5F, 0.0F, 0.05F).visible(() -> false);
private final SliderSetting turn = new SliderSetting("Поворот", 0.0F, -7.5f, 35F, 0.1F).visible(() -> !mode.is("Взмах") && !mode.is("Взмах 2") && !mode.is("Желе") && !mode.is("Тряска") && !mode.is("Вниз") && !mode.is("Копьё") && !mode.is("Выпад"));
private final SliderSetting speed = new SliderSetting("Скорость", 7.0F, 1F, 10F, 0.5F).visible(() -> !mode.is("Тряска") && !mode.is("Стандарт"));
private final BooleanSetting strengthInclineSetting = new BooleanSetting("Сила наклона", false).visible(() -> !mode.is("Вниз"));
private final SliderSetting strengthIncline = new SliderSetting("Сила наклона", 20.0F, 20.0F, 75.0F, 0.1F).visible(() -> strengthInclineSetting.get() && !mode.is("Вниз"));
private final BooleanSetting item360 = new BooleanSetting("Айтем 360", false).visible(() -> !mode.is("Взмах"));
@EventHandler
public void onRenderItem(RenderItemEvent event) {
if (event.getItemStack().isEmpty()) {
return;
}
boolean rightHand = event.getHandSide().equals(HandSide.RIGHT);
MatrixStack matrix = event.getMatrix();
if (auraCheckOffsets()) {
if (translate.get()) {
if (rightHand) {
matrix.translate(
rightHandPosition.getX(),
rightHandPosition.getY(),
rightOffsetZ.get()
);
} else {
matrix.translate(
leftHandPosition.getX(),
leftHandPosition.getY(),
leftOffsetZ.get()
);
}
}
}
if (item360.get()) {
long currentTime = System.currentTimeMillis();
float angle = (currentTime % 3600) / 10.0f;
matrix.translate(0.0, 0.0, 0.0);
matrix.rotate(Vector3f.YP.rotationDegrees(angle));
matrix.translate(0, 0, 0);
}
}
@EventHandler
public void onArmSwingAnimation(ArmSwingAnimationEvent event) {
float animationSpeed = this.speed.max() - this.speed.get() + this.speed.min();
if (!mode.is("Тряска") && !mode.is("Стандарт")) {
event.setAnimationSpeed(animationSpeed * 2F);
} else {
event.setAnimationSpeed(7);
}
}
public void animationProcess(MatrixStack stack, int handOffset, float swingProgress, float partialTicks) {
float anim = (float) Math.sin(swingProgress * (Math.PI / 2) * 2);
if (translate.get() && auraCheckOffsets()) {
boolean isRightHand = handOffset > 0;
if (isRightHand) {
stack.translate(rightHandPosition.getX(), rightHandPosition.getY(), rightOffsetZ.get());
} else {
stack.translate(-leftHandPosition.getX(), leftHandPosition.getY(), leftOffsetZ.get());
}
}
if (mode.is("Взмах")) {
} else if (mode.is("Взмах 2")) {
stack.translate(0.55f, -0.5f, -(0.7F + (anim * 0.002)));
stack.scale(1, 1, anim + 1);
stack.rotate(Vector3f.XP.rotationDegrees(-90 * anim * (strengthIncline.get() * .015F)));
} else if (mode.is("Сдвиг")) {
stack.translate(handOffset * 0.75f, -0.35f, -1);
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 90));
stack.rotate(Vector3f.ZP.rotationDegrees(handOffset * -60));
stack.rotate(Vector3f.XP.rotationDegrees(-90 - strengthIncline.get() * anim + turn.get()));
} else if (mode.is("Ломание")) {
stack.translate(handOffset * 0.75f, -0.35f, -1);
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 90));
stack.rotate(Vector3f.ZP.rotationDegrees(handOffset * -30));
stack.rotate(Vector3f.XP.rotationDegrees(-90 - strengthIncline.get() * anim + turn.get()));
} else if (mode.is("Выпад")) {
float f = MathHelper.sin(swingProgress * (MathHelper.PI / 2.0f) * 2.0f);
float f2 = strengthIncline.get() * 2.5F;
float f4 = f2 / 10.0f / 10.0f * 40.0f;
stack.translate(handOffset * 1.35f, -0.55f, -1.3F);
stack.translate(0, -0, 0);
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 45.0f));
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * f * -(f4 / 2.0f)));
stack.rotate(Vector3f.ZP.rotationDegrees(handOffset * f * -(f4 / 2.0f)));
stack.rotate(Vector3f.XP.rotationDegrees(handOffset * f * -f4));
stack.translate((handOffset * -0.5f), 0.2f, -0.3);
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 30));
stack.rotate(Vector3f.XP.rotationDegrees(handOffset * -80));
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 60));
} else if (mode.is("Копьё")) {
stack.translate(0.75f, -0.45f, -(1 + anim * 0.2));
stack.scale(1, 1, (anim * (strengthIncline.get() * .03F)) + 1);
stack.rotate(Vector3f.XP.rotationDegrees(-90));
} else if (mode.is("Вниз")) {
stack.translate((handOffset * 0.75F - anim * 0.5F), -(0.35F - anim * 0.25F), -1);
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 65));
stack.rotate(Vector3f.ZP.rotationDegrees(handOffset));
stack.rotate(Vector3f.XP.rotationDegrees(-110 - 20 * 4 * anim));
} else if (mode.is("Желе")) {
stack.translate(0.75f, -0.45f, -(1 + anim * 0.2));
stack.rotate(Vector3f.YP.rotationDegrees(handOffset * 35));
stack.scale(1, 1, (anim * (swingProgress * .65F * (strengthIncline.get() * .0175F))) + 1);
stack.rotate(Vector3f.XP.rotationDegrees(-90));
} else if (mode.is("Тряска")) {
float fapAnim = (1.F - getFapUpdatedAnimation(mc.player.isSwingInProgress) / 75.F * strengthIncline.get() * 4);
stack.translate(0.76f, -0.35f, -1);
stack.rotate(new Quaternion(new Vector3f(0, 1, 0), 110 + fapAnim * 15F, true));
stack.rotate(new Quaternion(new Vector3f(1, 0, 0), -110 , true));
stack.rotate(new Quaternion(new Vector3f(0, 1, 0), 75, true));
stack.rotate(new Quaternion(new Vector3f(1, 0, 0), 35 + fapAnim * 15F, true));
}
if (item360.get()) {
long currentTime = System.currentTimeMillis();
float angle = (currentTime % 3600) / 10.0f;
stack.translate(0, 0, 0);
stack.rotate(Vector3f.XN.rotationDegrees(angle));
stack.translate(-0, -0, -0);
}
}
public boolean auraCheck() {
AttackAura aura = Client.inst().featureManager().attackAura;
return !attackAuraOnly.get() || auraValid(aura);
}
public boolean auraCheckOffsets() {
AttackAura aura = Client.inst().featureManager().attackAura;
return !attackAuraOffsetsOnly.get() || auraValid(aura);
}
private boolean auraValid(AttackAura aura) {
return aura.enabled() && aura.currentTarget() != null;
}
private OldAnimation fapAnim = new OldAnimation();
private StopWatch timerSwinging = new StopWatch();
public float getFapUpdatedAnimation(boolean swinging) {
if (!swinging) timerSwinging.reset();
fapAnim.update();
int delayWave = 215;
int point1 = timerSwinging.elapsedTime() % delayWave >= delayWave / 2.F ? 0 : 1;
fapAnim.run(swinging ? point1 : 0.F, .2F);
fapAnim.setEasing(Easings.QUINT_OUT);
return fapAnim.get();
}
}