Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Авг 2023
- Сообщения
- 480
- Реакции
- 9
code:
package net.evaware.mixin;
import net.evaware.module.impl.combat.AntiBot;
import net.evaware.utils.client.ClientUtil;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.PlayerEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.scoreboard.*;
import net.minecraft.text.Text;
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;
@Mixin(PlayerEntityRenderer.class)
public abstract class MixinPlayerEntityRenderer extends LivingEntityRenderer<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> {
public MixinPlayerEntityRenderer(EntityRendererFactory.Context ctx, PlayerEntityModel<AbstractClientPlayerEntity> model, float shadowRadius) {
super(ctx, model, shadowRadius);
}
@Inject(method = "renderLabelIfPresent*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V", shift = At.Shift.AFTER))
private void onRenderLabelIfPresent(AbstractClientPlayerEntity abstractClientPlayerEntity, Text text, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) {
MinecraftClient client = MinecraftClient.getInstance();
if (client.world == null || client.player == null) return;
if (!ClientUtil.serverIPConstains("reallyworld")) return;
Scoreboard scoreboard = abstractClientPlayerEntity.getScoreboard();
ScoreboardObjective scoreboardObjective = scoreboard.getObjectiveForSlot(ScoreboardDisplaySlot.BELOW_NAME);
if (scoreboardObjective != null) {
for (PlayerEntity player : client.world.getPlayers()) {
if (player == null || player.equals(client.player) || AntiBot.isBot(player)) continue;
try {
ScoreAccess score = scoreboard.getOrCreateScore(player, scoreboardObjective);
String scoreText = (score == null ? 20 : score.getScore()) + " " + scoreboardObjective.getDisplayName().getString();
String scoreNumber = scoreText.replaceAll("[^0-9]", "");
int hp = Integer.parseInt(scoreNumber);
if (hp >= 0 && hp <= player.getMaxHealth()) {
player.setHealth((float) hp);
}
} catch (NumberFormatException e) {
System.err.println("Failed to parse scoreboard data for player: " + player.getName().getString());
e.printStackTrace();
}
}
}
}
}