-
Автор темы
- #1
Mega $elfcode
не благодарите
NameTag:
@ModuleInfo(name = "Nametags", description = "", category = Category.RENDER)
public class Nametags extends Module {
private final MultiBooleanValue ignore = new MultiBooleanValue("Ignore", this) {{
add(new BooleanValue("Friends", false));
add(new BooleanValue("Invisible", false));
}};
private final Font font = Fonts.INTER_BOLD.get(14);
private final Listener<RenderNameEvent> renderNameEvent = event -> {
if (event.getEntity() instanceof PlayerEntity) event.cancel();
};
private final Listener<PreBloomEvent> shader = event -> {
renderTag(event.getMatrix(), true);
};
private final Listener<Render2DEvent> render = event -> {
renderTag(event.getMatrix(), false);
};
private void renderTag(MatrixStack matrix, boolean shader) {
for (PlayerEntity entity : getEntities()) {
Vector3d iVec = RenderUtil.interpolate(entity, mc.getRenderPartialTicks());
double posX = iVec.x;
double posY = iVec.y;
double posZ = iVec.z;
Vector2d vec = RenderUtil.project(posX, posY + entity.getHeight() + 0.5F, posZ);
if (vec != null) {
String playerName = TextFormatting.getTextWithoutFormattingCodes(entity.getName().getString());
String title = playerName + (playerName.isEmpty() ? "" : " ") + TextFormatting.GREEN + (int) (mc.getCurrentServerData().serverIP.contains("funtime") ? getHealth(entity) : entity.getHealth());
double width = font.getWidth(title) + 4;
GL11.glPushMatrix();
Color colorFirst = ColorUtil.withAlpha(getTheme().getFirstColor(), 200);
Color colorSecond = ColorUtil.withAlpha(getTheme().getSecondColor(), 200);
int color1 = ColorUtil.lerp(5, 0, colorFirst, colorSecond).hashCode();
int color2 = ColorUtil.lerp(5, 90, colorFirst, colorSecond).hashCode();
int color3 = ColorUtil.lerp(5, 180, colorFirst, colorSecond).hashCode();
int color4 = ColorUtil.lerp(5, 270, colorFirst, colorSecond).hashCode();
if (!shader) {
RenderUtil.roundedRect(vec.x - width / 2F, vec.y, width, font.getHeight(), 2, ColorUtil.getColor(20, 20, 20, 64));
font.drawCenter(matrix, title, vec.x, vec.y, -1);
} else {
RenderUtil.roundedGradient(vec.x - width / 2F, vec.y, width, font.getHeight(), 2, color1, color2, color3, color4);
}
GL11.glPopMatrix();
}
}
}
private List<AbstractClientPlayerEntity> getEntities() {
return mc.world.getPlayers().stream().filter(entity -> {
if (entity.isInvisible() && ignore.get("Invisible").getValue()) return false;
if (ignore.get("Friends").getValue() && (dissolve.getFriendManager().isFriend(entity.getName().getString())))
return false;
if (entity.equals(mc.player) && mc.gameSettings.getPointOfView().equals(PointOfView.FIRST_PERSON))
return false;
if (!AntiBot.checkBot(entity)) return false;
return !entity.isInvisible() || !ignore.get("Invisible").getValue();
}).toList();
}
public float getHealth(PlayerEntity ent) {
ScoreObjective scoreBoard = null;
String resolvedHp = "";
if ((ent.getWorldScoreboard()).getObjectiveInDisplaySlot(Scoreboard.getObjectiveDisplaySlotNumber("belowName")) != null) {
scoreBoard = (ent.getWorldScoreboard()).getObjectiveInDisplaySlot(Scoreboard.getObjectiveDisplaySlotNumber("belowName"));
if (scoreBoard != null) {
Score scoreboardScore = ent.getWorldScoreboard().getOrCreateScore(ent.getName().getString(), scoreBoard);
resolvedHp = String.valueOf(scoreboardScore.getScorePoints());
}
}
float numValue = 0;
try {
numValue = Float.parseFloat(resolvedHp);
} catch (NumberFormatException ignored) {
}
return numValue;
}
}
TargetHud:
@ModuleInfo(name = "Target Hud", description = "", category = Category.RENDER)
public class TargetHud extends Module {
public final DragValue positionValue = new DragValue("Position", this, new Vector2d(200, 200));
public final BooleanValue followPlayer = new BooleanValue("Entity tracking", this, false);
public Vector2d position = new Vector2d(0, 0);
public Counter counter = Counter.create();
public Entity target;
public boolean inWorld;
public final Listener<MotionEvent> onMotion = event -> {
if (mc.currentScreen instanceof ChatScreen) {
counter.reset();
target = mc.player;
}
if (target == null) {
inWorld = false;
return;
}
inWorld = StreamSupport.stream(mc.world.getAllEntities().spliterator(), true).filter(entity -> entity == target).isParallel();
};
public final Listener<AttackEvent> onAttack = event -> {
if (event.getTarget() instanceof AbstractClientPlayerEntity) {
target = event.getTarget();
counter.reset();
}
};
private final Animation openingAnimation = new Animation(Easing.EASE_OUT_ELASTIC, 500);
private final Animation healthAnimation = new Animation(Easing.EASE_OUT_SINE, 500);
private final Font interbold20 = Fonts.INTER_BOLD.get(16);
private final Font intermedium14 = Fonts.INTER_BOLD.get(12);
private final int INDENT = 4;
public final Listener<PreBloomEvent> onBloom = event -> {
Entity target = this.target;
if (target == null) {
return;
}
boolean out = (!this.inWorld || this.counter.hasReached(1000));
openingAnimation.setDuration(out ? 400 : 300);
openingAnimation.setEasing(out ? Easing.EASE_IN_BACK : Easing.EASE_OUT_BACK);
openingAnimation.run(out ? 0 : 1);
if (openingAnimation.getValue() <= 0) return;
String name = target.getName().getString();
double x = this.position.x;
double y = this.position.y;
double nameWidth = interbold20.getWidth(name);
int faceScale = 16;
double healthBarWidth = Math.max(faceScale + nameWidth + INDENT, 80);
double width = INDENT * 3F + healthBarWidth;
double height = faceScale + INDENT * 4;
double scale = openingAnimation.getValue();
GlStateManager.pushMatrix();
GlStateManager.translated((x + width / 2) * (1 - scale), (y + height / 2) * (1 - scale), 0);
GlStateManager.scaled(scale, scale, 0);
Color colorFirst = ColorUtil.withAlpha(getTheme().getFirstColor(), 255).brighter();
Color colorSecond = ColorUtil.withAlpha(getTheme().getSecondColor(), 255).brighter();
int color1 = ColorUtil.lerp(5, 0, colorFirst, colorSecond).hashCode();
int color2 = ColorUtil.lerp(5, 90, colorFirst, colorSecond).hashCode();
int color3 = ColorUtil.lerp(5, 180, colorFirst, colorSecond).hashCode();
int color4 = ColorUtil.lerp(5, 270, colorFirst, colorSecond).hashCode();
RenderUtil.roundedGradient(x, y, width, height, 3, color1, color2, color3, color4);
GlStateManager.popMatrix();
};
public final Listener<ShaderEvent> onShader = event -> {
if (event.isBlur()) {
Entity target = this.target;
if (target == null) {
return;
}
if (openingAnimation.getValue() <= 0) return;
String name = target.getName().getString();
double x = this.position.x;
double y = this.position.y;
double nameWidth = interbold20.getWidth(name);
int faceScale = 16;
double healthBarWidth = Math.max(faceScale + nameWidth + INDENT, 80);
double width = INDENT * 3F + healthBarWidth;
double height = faceScale + INDENT * 4;
double scale = openingAnimation.getValue();
GlStateManager.pushMatrix();
GlStateManager.translated((x + width / 2) * (1 - scale), (y + height / 2) * (1 - scale), 0);
GlStateManager.scaled(scale, scale, 0);
Color colorFirst = ColorUtil.withAlpha(getTheme().getFirstColor(), 255).brighter();
Color colorSecond = ColorUtil.withAlpha(getTheme().getSecondColor(), 255).brighter();
int color1 = ColorUtil.lerp(5, 0, colorFirst, colorSecond).hashCode();
int color2 = ColorUtil.lerp(5, 90, colorFirst, colorSecond).hashCode();
int color3 = ColorUtil.lerp(5, 180, colorFirst, colorSecond).hashCode();
int color4 = ColorUtil.lerp(5, 270, colorFirst, colorSecond).hashCode();
RenderUtil.roundedGradient(x, y, width, height, 3, color1, color2, color3, color4);
GlStateManager.popMatrix();
}
};
private void setPosition(Entity target, double width, double height) {
if (!followPlayer.getValue()) {
this.position.x = positionValue.position.x;
this.position.y = positionValue.position.y;
return;
}
if (target.equals(mc.player)) {
this.position.x = (mw.getScaledWidth() / 2F) - (positionValue.size.x / 2F);
this.position.y = (mw.getScaledHeight() / 2F) + (positionValue.size.y * 2F);
} else {
Vector3d interpolatedPosition = RenderUtil.interpolate(target, mc.getRenderPartialTicks());
double posX = interpolatedPosition.x;
double posY = interpolatedPosition.y;
double posZ = interpolatedPosition.z;
Vector2d position = RenderUtil.project(posX, posY + ((target.getHeight() + 0.4F) * 0.5F), posZ);
if (position == null) return;
this.position.x = position.x - (positionValue.size.x / 2F);
this.position.y = position.y;
}
this.positionValue.setSize(new Vector2d(width, height));
}
public final Listener<Render2DEvent> onRender2D = event -> {
Entity target = this.target;
if (target == null) {
healthAnimation.setValue(0);
return;
}
boolean out = (!this.inWorld || this.counter.hasReached(1000));
openingAnimation.setDuration(out ? 400 : 300);
openingAnimation.setEasing(out ? Easing.EASE_IN_BACK : Easing.EASE_OUT_BACK);
openingAnimation.run(out ? 0 : 1);
if (openingAnimation.getValue() <= 0) return;
String name = target.getName().getString();
int faceScale = 16;
double x = this.position.x;
double y = this.position.y;
double nameWidth = interbold20.getWidth(name);
double health = !this.inWorld ? 0 : Mathf.round(mc.getCurrentServerData().serverIP.contains("funtime") ? getHealth((PlayerEntity) target) : ((AbstractClientPlayerEntity) target).getHealth(), 1);
double healthBarWidth = Math.max(faceScale + nameWidth + INDENT, 80);
healthAnimation.setEasing(Easing.EASE_OUT_QUAD);
healthAnimation.setDuration(250);
healthAnimation.run((health / Math.max(health, ((AbstractClientPlayerEntity) target).getMaxHealth())) * healthBarWidth);
double healthRemainingWidth = healthAnimation.getValue();
double width = INDENT * 3F + healthBarWidth;
double height = faceScale + INDENT * 4;
double scale = openingAnimation.getValue();
GlStateManager.pushMatrix();
GlStateManager.translated((x + width / 2) * (1 - scale), (y + height / 2) * (1 - scale), 0);
GlStateManager.scaled(scale, scale, 0);
Color colorFirst = ColorUtil.withAlpha(getTheme().getFirstColor(), 128);
Color colorSecond = ColorUtil.withAlpha(getTheme().getSecondColor(), 128);
int color1 = ColorUtil.lerp(5, 0, colorFirst, colorSecond).hashCode();
int color2 = ColorUtil.lerp(5, 90, colorFirst, colorSecond).hashCode();
int color3 = ColorUtil.lerp(5, 180, colorFirst, colorSecond).hashCode();
int color4 = ColorUtil.lerp(5, 270, colorFirst, colorSecond).hashCode();
RenderUtil.roundedOutline(x, y, width, height, 3 + 0.5F, 0.5, new Color(255, 255, 255, 128).hashCode());
RenderUtil.roundedGradient(x, y, width, height, 3, color1, color2, color3, color4);
int OFFSET = 8;
interbold20.draw(event.getMatrix(), name, x + OFFSET + INDENT / 2F + faceScale, y + INDENT + (faceScale / 2F) - (interbold20.getHeight() / 2F), -1);
GlStateManager.popMatrix();
GlStateManager.pushMatrix();
GlStateManager.translated((x + width / 2) * (1 - scale), (y + height / 2) * (1 - scale), 0);
GlStateManager.scaled(scale, scale, 0);
renderTargetHead(event.getMatrix(), target, x + INDENT * 1.5F, y + INDENT * 1.5F, faceScale);
String hpText = String.valueOf(health).replace(".0", "") + "HP";
double hpX = Mathf.clamp(x + OFFSET + INDENT / 2F + faceScale + intermedium14.getWidth(hpText) / 2F, x + INDENT * 1.5F + healthBarWidth - intermedium14.getWidth(hpText) / 2F, x + INDENT * 1.5F + healthRemainingWidth);
intermedium14.drawCenter(event.getMatrix(), hpText, hpX, y + faceScale, -1);
if (!healthAnimation.isFinished()) {
Fonts.ICON.get(12).drawCenter(event.getMatrix(), Icon.DOWN.getCharacter(), x + INDENT * 1.5F + healthRemainingWidth - 0.5F, y + OFFSET + faceScale - INDENT / 1.5F - 0.5, -1);
}
RenderUtil.roundedRect(x + INDENT * 1.5F, y + OFFSET + faceScale + INDENT / 2F,
healthBarWidth, 2, 0.5, new Color(150, 150, 150).hashCode());
RenderUtil.roundedRect(x + INDENT * 1.5F, y + OFFSET + faceScale + INDENT / 2F,
healthRemainingWidth, 2, 0.5, Color.WHITE.hashCode());
GlStateManager.popMatrix();
setPosition(target, width, height);
};
private void renderTargetHead(MatrixStack matrixStack, final Entity entity, final double x, final double y, final int size) {
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.alphaFunc(GL11.GL_GREATER, 0.0F);
GlStateManager.enableTexture();
final ResourceLocation resourceLocation = ((AbstractClientPlayerEntity) entity).getLocationSkin();
mc.getTextureManager().bindTexture(resourceLocation);
GlStateManager.color4f(1F, 1F, 1F, 1F);
AbstractGui.blit(matrixStack, (float) x, (float) y, size, size, 4, 4, 4, 4, 32, 32);
GLUtils.scaleStart((float) (x + size / 2F), (float) (y + size / 2F), 1.1F);
AbstractGui.blit(matrixStack, (float) x, (float) y, size, size, 20, 4, 4, 4, 32, 32);
GLUtils.scaleEnd();
GlStateManager.disableBlend();
}
public float getHealth(PlayerEntity ent) {
ScoreObjective scoreBoard = null;
String resolvedHp = "";
if ((ent.getWorldScoreboard()).getObjectiveInDisplaySlot(Scoreboard.getObjectiveDisplaySlotNumber("belowName")) != null) {
scoreBoard = (ent.getWorldScoreboard()).getObjectiveInDisplaySlot(Scoreboard.getObjectiveDisplaySlotNumber("belowName"));
if (scoreBoard != null) {
Score scoreboardScore = ent.getWorldScoreboard().getOrCreateScore(ent.getName().getString(), scoreBoard);
resolvedHp = String.valueOf(scoreboardScore.getScorePoints());
}
}
float numValue = 0;
try {
numValue = Float.parseFloat(resolvedHp);
} catch (NumberFormatException ignored) {
}
return numValue;
}
}