- Выберите загрузчик игры
- Fabric
Всем привет!
Это моя уже 3 - 4 тема
Хочу слить вам олдовую функции из 1.12.2 читов - BabyMod.(Делает вашего персонажа бейбиком)
коды
Надеюсь сможете перенести
ps: если будут какие то баги то пишите буду фиксить
Это моя уже 3 - 4 тема
Хочу слить вам олдовую функции из 1.12.2 читов - BabyMod.(Делает вашего персонажа бейбиком)
коды
BabyMod:
package ru.zxcrace.gloubert.systems.module.impl.render;
import ru.zxcrace.gloubert.systems.module.Category;
import ru.zxcrace.gloubert.systems.module.Module;
import ru.zxcrace.gloubert.systems.module.ModuleRegister;
@ModuleRegister(name = "BabyModel", category = Category.RENDER)
public class BabyModel extends Module {
public static BabyModel INSTANCE;
public BabyModel() {
INSTANCE = this;
}
}
LivingRendererMixin:
package ru.zxcrace.gloubert.mixin.client;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.state.LivingEntityRenderState;
import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.zxcrace.gloubert.systems.module.impl.render.BabyModel;
@Mixin(LivingEntityRenderer.class)
public abstract class LivingEntityRendererMixin {
@Inject(method = "render", at = @At("HEAD"))
private void onRenderHead(LivingEntityRenderState state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
MinecraftClient mc = MinecraftClient.getInstance();
if (BabyModel.INSTANCE != null && BabyModel.INSTANCE.isEnabled() && state instanceof PlayerEntityRenderState playerState && mc.player != null && playerState.id == mc.player.getId()) {
matrices.push();
matrices.scale(0.5f, 0.5f, 0.5f);
}
}
@Inject(method = "render", at = @At("RETURN"))
private void onRenderReturn(LivingEntityRenderState state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
MinecraftClient mc = MinecraftClient.getInstance();
if (BabyModel.INSTANCE != null && BabyModel.INSTANCE.isEnabled() && state instanceof PlayerEntityRenderState playerState && mc.player != null && playerState.id == mc.player.getId()) {
matrices.pop();
}
}
}
}
CameraMixin:
package ru.zxcrace.gloubert.mixin.client;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.Camera;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.BlockView;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.zxcrace.gloubert.Gloubert;
import ru.zxcrace.gloubert.systems.event.impl.game.CameraPositionEvent;
import ru.zxcrace.gloubert.systems.module.impl.render.BabyModel;
@Mixin(Camera.class)
public abstract class CameraMixin {
@Shadow
private Vec3d pos;
@Shadow private Entity focusedEntity;
@Shadow @Final
private BlockPos.Mutable blockPos;
@Inject(method = "setPos(Lnet/minecraft/util/math/Vec3d;)V", at = @At("HEAD"), cancellable = true)
private void posHook(Vec3d pos, CallbackInfo ci) {
CameraPositionEvent event = new CameraPositionEvent(pos);
Gloubert.getInstance().getEventManager().triggerEvent(event);
this.pos = pos = event.getPos();
blockPos.set(pos.x,pos.y,pos.z);
ci.cancel();
}
@Inject(
method = "update",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/Camera;setPos(DDD)V",
shift = At.Shift.AFTER
)
)
private void onUpdate(
BlockView area,
Entity focusedEntity,
boolean thirdPerson,
boolean inverseView,
float tickDelta,
CallbackInfo ci
) {
if (!BabyModel.INSTANCE.isEnabled()) return;
if (!thirdPerson) return;
if (!(this.focusedEntity instanceof PlayerEntity)) return;
double vanillaEye = 1.62;
double babyEye = 0.81;
this.pos = this.pos.subtract(0.0, vanillaEye - babyEye, 0.0);
}
}
MixinEntity:
package ru.zxcrace.gloubert.mixin.client;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.Box;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.zxcrace.gloubert.Gloubert;
import ru.zxcrace.gloubert.systems.event.impl.game.BoundingBoxControlEvent;
@Mixin(Entity.class)
public class MixinEntity {
@Shadow
private Box boundingBox;
@ModifyExpressionValue(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isControlledByPlayer()Z"))
private boolean fixFallDistanceCalculation(boolean original) {
if ((Object) this == MinecraftClient.getInstance().player) {
return false;
}
return original;
}
@Inject(method = "getBoundingBox", at = @At("HEAD"), cancellable = true)
public final void getBoundingBox(CallbackInfoReturnable<Box> cir) {
BoundingBoxControlEvent event = new BoundingBoxControlEvent(boundingBox, (Entity) (Object) this);
Gloubert.getInstance().getEventManager().triggerEvent(event);
cir.setReturnValue(event.getBox());
}
}
ps: если будут какие то баги то пишите буду фиксить
Пожалуйста, авторизуйтесь для просмотра ссылки.
Последнее редактирование: