-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Привет,форумчане.
Вышел с РО ,сейчас будет дроп пачки гайдов на полезные улучшения в exp 3.1
Сегодня же мы разберем как же сделать
красивый , кастомный шрифт в ESP как на фото ниже
Вышел с РО ,сейчас будет дроп пачки гайдов на полезные улучшения в exp 3.1
Сегодня же мы разберем как же сделать
красивый , кастомный шрифт в ESP как на фото ниже
На самом деле , в этом нету ничего сложного,но тем не менее,я вижу что в многих клиентах досихпор используется рендер через mc.fontrenderer
Приступим к гайду!
- Изначально наш код ESP выглядит примерно так(строки с mc.fontrenderer выделены для удобства)
ESP:
@ModReg(name = "ESP", category = ModGroup.Render)
public class ESP extends Mod {
public ModeListSetting remove = new ModeListSetting("Убрать", new BooleanSetting("Боксы", false), new BooleanSetting("Полоску хп", false), new BooleanSetting("Зачарования", false), new BooleanSetting("Список эффектов", false));
public ModeListSetting targets = new ModeListSetting("Отображать",
new BooleanSetting("Себя", true),
new BooleanSetting("Игроки", true),
new BooleanSetting("Предметы", false),
new BooleanSetting("Мобы", false)
);
float healthAnimation = 0.0f;
public ESP() {
addSettings(targets, remove);
}
float length;
private final HashMap<Entity, Vector4f> positions = new HashMap<>();
public ColorSetting color = new ColorSetting("Color", -1);
@Subscribe
public void onDisplay(EventDisplay e) {
if (mc.world == null || e.getType() != EventDisplay.Type.PRE) {
return;
}
positions.clear();
Vector4i colors = new Vector4i(Theme.rectColor, Theme.rectColor, Theme.mainRectColor, Theme.mainRectColor);
Vector4i friendColors = new Vector4i(HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 0, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 90, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 180, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 270, 1));
for (Entity entity : mc.world.getAllEntities()) {
if (!isValid(entity)) continue;
if (!(entity instanceof PlayerEntity && entity != mc.player && targets.getValueByName("Игроки").get()
|| entity instanceof ItemEntity && targets.getValueByName("Предметы").get()
|| (entity instanceof AnimalEntity || entity instanceof MobEntity) && targets.getValueByName("Мобы").get()
|| entity == mc.player && targets.getValueByName("Себя").get() && !(mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) && !Main.getInstance().getModMngr().getWorldTweaks().child
)) continue;
double x = MathUtil.interpolate(entity.getPosX(), entity.lastTickPosX, e.getPartialTicks());
double y = MathUtil.interpolate(entity.getPosY(), entity.lastTickPosY, e.getPartialTicks());
double z = MathUtil.interpolate(entity.getPosZ(), entity.lastTickPosZ, e.getPartialTicks());
Vector3d size = new Vector3d(entity.getBoundingBox().maxX - entity.getBoundingBox().minX, entity.getBoundingBox().maxY - entity.getBoundingBox().minY, entity.getBoundingBox().maxZ - entity.getBoundingBox().minZ);
AxisAlignedBB aabb = new AxisAlignedBB(x - size.x / 2f, y, z - size.z / 2f, x + size.x / 2f, y + size.y, z + size.z / 2f);
Vector4f position = null;
for (int i = 0; i < 8; i++) {
Vector2f vector = ProjectionUtil.project(i % 2 == 0 ? aabb.minX : aabb.maxX, (i / 2) % 2 == 0 ? aabb.minY : aabb.maxY, (i / 4) % 2 == 0 ? aabb.minZ : aabb.maxZ);
if (position == null) {
position = new Vector4f(vector.x, vector.y, 1, 1.0f);
} else {
position.x = Math.min(vector.x, position.x);
position.y = Math.min(vector.y, position.y);
position.z = Math.max(vector.x, position.z);
position.w = Math.max(vector.y, position.w);
}
}
positions.put(entity, position);
}
RenderSystem.enableBlend();
RenderSystem.disableTexture();
RenderSystem.defaultBlendFunc();
RenderSystem.shadeModel(7425);
buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);
for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
Vector4f position = entry.getValue();
if (entry.getKey() instanceof LivingEntity entity) {
if (!remove.getValueByName("Боксы").get()) {
DisplayUtils.drawBox(position.x - 0.5f, position.y - 0.5f, position.z + 0.5f, position.w + 0.5f, 2, ColorUtils.rgba(0, 0, 0, 128));
DisplayUtils.drawBoxTest(position.x, position.y, position.z, position.w, 1, FriendStorage.isFriend(entity.getName().getString()) ? friendColors : colors);
}
float hpOffset = 3f;
float out = 0.5f;
if (!remove.getValueByName("Полоску хп").get()) {
String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
DisplayUtils.drawRectBuilding(position.x - hpOffset - out, position.y - out, position.x - hpOffset + 1 + out, position.w + out, ColorUtils.rgba(0, 0, 0, 128));
DisplayUtils.drawRectBuilding(position.x - hpOffset, position.y, position.x - hpOffset + 1, position.w, ColorUtils.rgba(0, 0, 0, 128));
Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
float hp = entity.getHealth();
float maxHp = entity.getMaxHealth();
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
hp = score.getScorePoints();
maxHp = 20;
}
DisplayUtils.drawMCVerticalBuilding(position.x - hpOffset, position.y + (position.w - position.y) * (1 - MathHelper.clamp(hp / maxHp, 0, 1)), position.x - hpOffset + 1, position.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.w : colors.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.x : colors.x);
}
}
}
Tessellator.getInstance().draw();
RenderSystem.shadeModel(7424);
RenderSystem.enableTexture();
RenderSystem.disableBlend();
for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
Entity entity = entry.getKey();
if (entity instanceof LivingEntity living) {
Score score = mc.world.getScoreboard().getOrCreateScore(living.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
float hp = living.getHealth();
float maxHp = living.getMaxHealth();
String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
hp = score.getScorePoints();
maxHp = 20;
}
Vector4f position = entry.getValue();
float width = position.z - position.x;
GL11.glPushMatrix();
String friendPrefix = FriendStorage.isFriend(entity.getName().getString()) ? TextFormatting.GREEN + "[F] " : "";
String creativePrefix = "";
if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative()) {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + "GM" + TextFormatting.GRAY + "]";
} else {
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + (int) hp + TextFormatting.GRAY + "]";
} else {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + ((int) hp + (int) living.getAbsorptionAmount()) + TextFormatting.GRAY + "]";
}
}
healthAnimation = MathUtil.fast(healthAnimation, MathHelper.clamp(hp / maxHp, 0, 1), 10);
TextComponent name = (TextComponent) ITextComponent.getTextComponentOrEmpty(friendPrefix);
int colorRect = FriendStorage.isFriend(entity.getName().getString()) ? ColorUtils.rgba(66, 163, 60, 120) : ColorUtils.rgba(10, 10, 10, 120);
name.append(FriendStorage.isFriend(entity.getName().getString()) ? ITextComponent.getTextComponentOrEmpty(TextFormatting.RED + "protected") : entity.getDisplayName());
name.appendString(creativePrefix);
glCenteredScale(position.x + width / 2f - length / 2f - 4, position.y - 9, length + 8, 13, 0.5f);
length = mc.fontRenderer.getStringWidth(name.getString());
DisplayUtils.drawRoundedRect(position.x + width / 2f - length / 2f - 4.5f, position.y - 15.5f, length + 8, 17, 2,ColorUtils.rgb(17,17,17));
mc.fontRenderer.drawString(e.getMatrixStack(), name.getString(), position.x + width / 2f - length / 2f, position.y - 12.5f, -1);
GL11.glPopMatrix();
if (!remove.getValueByName("Список эффектов").get()) {
drawPotions(e.getMatrixStack(), living, position.z + 2, position.y);
}
drawItems(e.getMatrixStack(), living, (int) (position.x + width / 2f), (int) (position.y - 14.5f));
} else if (entity instanceof ItemEntity item) {
Vector4f position = entry.getValue();
float width = position.z - position.x;
float length = mc.fontRenderer.getStringPropertyWidth(entity.getDisplayName());
GL11.glPushMatrix();
glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
mc.fontRenderer.drawString(e.getMatrixStack(), entity.getDisplayName(), position.x + width / 2f - length / 2f, position.y - 7, -1);
GL11.glPopMatrix();
}
}
}
public boolean isInView(Entity ent) {
if (mc.getRenderViewEntity() == null) {
return false;
}
frustum.setCameraPosition(mc.getRenderManager().info.getProjectedView().x, mc.getRenderManager().info.getProjectedView().y, mc.getRenderManager().info.getProjectedView().z);
return frustum.isBoundingBoxInFrustum(ent.getBoundingBox()) || ent.ignoreFrustumCheck;
}
int index = 0;
private void drawPotions(MatrixStack matrixStack, LivingEntity entity, float posX, float posY) {
for (Iterator var8 = entity.getActivePotionEffects().iterator(); var8.hasNext(); ++index) {
EffectInstance effectInstance = (EffectInstance)var8.next();
int amp = effectInstance.getAmplifier() + 1;
String ampStr = "";
if (amp >= 1 && amp <= 9) {
ampStr = " " + I18n.format("enchantment.level." + (amp + 1));
}
String text = I18n.format(effectInstance.getEffectName(), new Object[0]) + ampStr + " - " + EffectUtils.getPotionDurationString(effectInstance, 1);
PotionSpriteUploader potionspriteuploader = mc.getPotionSpriteUploader();
Effect effect = effectInstance.getPotion();
int iconSize = 8;
TextureAtlasSprite textureatlassprite = potionspriteuploader.getSprite(effect);
mc.getTextureManager().bindTexture(textureatlassprite.getAtlasTexture().getTextureLocation());
DisplayEffectsScreen.blit(matrixStack, (int)posX, (int)posY - 1, iconSize, iconSize, iconSize, textureatlassprite);
mc.fontRenderer.drawString(matrixStack, text, posX + iconSize, posY, -1, 6, 0.05f);
posY += mc.fontRenderer.getHeight(6) + 4;
}
}
private void drawItems(MatrixStack matrixStack, LivingEntity entity, int posX, int posY) {
int size = 8;
int padding = 6;
float fontHeight = mc.fontRenderer.FONT_HEIGHT;
List<ItemStack> items = new ArrayList<>();
ItemStack mainStack = entity.getHeldItemMainhand();
if (!mainStack.isEmpty()) {
items.add(mainStack);
}
for (ItemStack itemStack : entity.getArmorInventoryList()) {
if (itemStack.isEmpty()) continue;
items.add(itemStack);
}
ItemStack offStack = entity.getHeldItemOffhand();
if (!offStack.isEmpty()) {
items.add(offStack);
}
posX -= (items.size() * (size + padding)) / 2f;
for (ItemStack itemStack : items) {
if (itemStack.isEmpty()) continue;
GL11.glPushMatrix();
glCenteredScale(posX, posY - 5, size / 2f, size / 2f, 0.5f);
mc.getItemRenderer().renderItemAndEffectIntoGUI(itemStack, posX, posY - 5);
mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, posX, posY - 5, null);
GL11.glPopMatrix();
if (itemStack.isEnchanted() && !remove.getValueByName("Зачарования").get()) {
int ePosY = (int) (posY - fontHeight);
Map<Enchantment, Integer> enchantmentsMap = EnchantmentHelper.getEnchantments(itemStack);
for (Enchantment enchantment : enchantmentsMap.keySet()) {
int level = enchantmentsMap.get(enchantment);
if (level < 1 || !enchantment.canApply(itemStack)) continue;
IFormattableTextComponent iformattabletextcomponent = new TranslationTextComponent(enchantment.getName());
String enchText = iformattabletextcomponent.getString().substring(0, 2) + level;
mc.fontRenderer.drawString(matrixStack, enchText, posX, ePosY - 5, -1, 6, 0.05f);
ePosY -= (int) fontHeight;
}
}
posX += size + padding;
}
}
public boolean isValid(Entity e) {
if (AntiBot.isBot(e)) return false;
return isInView(e);
}
public static void drawMcRect(
double left,
double top,
double right,
double bottom,
int color) {
if (left < right) {
double i = left;
left = right;
right = i;
}
if (top < bottom) {
double j = top;
top = bottom;
bottom = j;
}
float f3 = (float) (color >> 24 & 255) / 255.0F;
float f = (float) (color >> 16 & 255) / 255.0F;
float f1 = (float) (color >> 8 & 255) / 255.0F;
float f2 = (float) (color & 255) / 255.0F;
BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();
bufferbuilder.pos(left, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(right, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(right, top, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(left, top, 1.0F).color(f, f1, f2, f3).endVertex();
}
public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
glTranslatef(x + w / 2, y + h / 2, 0);
glScalef(f, f, 1);
glTranslatef(-x - w / 2, -y - h / 2, 0);
}
}
1. Заменить mc.fontRenderer.getStringWidth
на Fonts.consolas.getWidth(name.getString(), 7);, либо на ClientFonts.msBold[15].getWidth(name.getString());( в зависимости от вашей системы шрифтов)
2. Заменить mc.fontRenderer.drawString
на ClientFonts.msBold[15].drawstring или же на Fonts.consolas.drawstring( содержимое , размер шрифта)
3. Заменить posY += mc.fontRenderer.getHeight(6) + 4;
на posY += Fonts.consolas.getHeight(6) + 4;
4.Так же,если вы хотите такой же рект,и молнию , в метод отрисовки нужно добавить
ESP:
length = ClientFonts.msBold[24].getWidth(name.getString());
DisplayUtils.drawRoundedRect(position.x + width / 2f - length / 2f -12.5f, position.y - 15.5f, length + 16, 17, 2,ColorUtils.rgba(17,17,17,100));
Fonts.damage.drawText(e.getMatrixStack(),"C",position.x + width / 2f - length / 2f - 11,position.y - 12.5f,ColorUtils.red,10);
ClientFonts.msBold[24].drawString(e.getMatrixStack(), name.getString(), position.x + width / 2f - length / 2f, position.y - 12.5f, -1);
И вот,у нас вышел улучшеный ESP с красивыми шрифтами,вместо майнкрафтовских,с которыми можно сделать нормальный индикатор талисманов,с адекватным скейлом.
Так же вот полный код,для тех,кому лень что то учить,и просто в кайф пастить:
Так же вот полный код,для тех,кому лень что то учить,и просто в кайф пастить:
Код:
@ModReg(name = "ESP", category = ModGroup.Render)
public class ESP extends Mod {
public ModeListSetting remove = new ModeListSetting("Убрать", new BooleanSetting("Боксы", false), new BooleanSetting("Полоску хп", false), new BooleanSetting("Зачарования", false), new BooleanSetting("Список эффектов", false));
public ModeListSetting targets = new ModeListSetting("Отображать",
new BooleanSetting("Себя", true),
new BooleanSetting("Игроки", true),
new BooleanSetting("Предметы", false),
new BooleanSetting("Мобы", false)
);
float healthAnimation = 0.0f;
public ESP() {
addSettings(targets, remove);
}
float length;
private final HashMap<Entity, Vector4f> positions = new HashMap<>();
public ColorSetting color = new ColorSetting("Color", -1);
@Subscribe
public void onDisplay(EventDisplay e) {
if (mc.world == null || e.getType() != EventDisplay.Type.PRE) {
return;
}
positions.clear();
Vector4i colors = new Vector4i(Theme.rectColor, Theme.rectColor, Theme.mainRectColor, Theme.mainRectColor);
Vector4i friendColors = new Vector4i(HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 0, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 90, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 180, 1), HUD.getColor(ColorUtils.rgb(144, 238, 144), ColorUtils.rgb(0, 139, 0), 270, 1));
for (Entity entity : mc.world.getAllEntities()) {
if (!isValid(entity)) continue;
if (!(entity instanceof PlayerEntity && entity != mc.player && targets.getValueByName("Игроки").get()
|| entity instanceof ItemEntity && targets.getValueByName("Предметы").get()
|| (entity instanceof AnimalEntity || entity instanceof MobEntity) && targets.getValueByName("Мобы").get()
|| entity == mc.player && targets.getValueByName("Себя").get() && !(mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) && !Main.getInstance().getModMngr().getWorldTweaks().child
)) continue;
double x = MathUtil.interpolate(entity.getPosX(), entity.lastTickPosX, e.getPartialTicks());
double y = MathUtil.interpolate(entity.getPosY(), entity.lastTickPosY, e.getPartialTicks());
double z = MathUtil.interpolate(entity.getPosZ(), entity.lastTickPosZ, e.getPartialTicks());
Vector3d size = new Vector3d(entity.getBoundingBox().maxX - entity.getBoundingBox().minX, entity.getBoundingBox().maxY - entity.getBoundingBox().minY, entity.getBoundingBox().maxZ - entity.getBoundingBox().minZ);
AxisAlignedBB aabb = new AxisAlignedBB(x - size.x / 2f, y, z - size.z / 2f, x + size.x / 2f, y + size.y, z + size.z / 2f);
Vector4f position = null;
for (int i = 0; i < 8; i++) {
Vector2f vector = ProjectionUtil.project(i % 2 == 0 ? aabb.minX : aabb.maxX, (i / 2) % 2 == 0 ? aabb.minY : aabb.maxY, (i / 4) % 2 == 0 ? aabb.minZ : aabb.maxZ);
if (position == null) {
position = new Vector4f(vector.x, vector.y, 1, 1.0f);
} else {
position.x = Math.min(vector.x, position.x);
position.y = Math.min(vector.y, position.y);
position.z = Math.max(vector.x, position.z);
position.w = Math.max(vector.y, position.w);
}
}
positions.put(entity, position);
}
RenderSystem.enableBlend();
RenderSystem.disableTexture();
RenderSystem.defaultBlendFunc();
RenderSystem.shadeModel(7425);
buffer.begin(7, DefaultVertexFormats.POSITION_COLOR);
for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
Vector4f position = entry.getValue();
if (entry.getKey() instanceof LivingEntity entity) {
if (!remove.getValueByName("Боксы").get()) {
DisplayUtils.drawBoxTest(position.x, position.y, position.z, position.w, 0.5f, FriendStorage.isFriend(entity.getName().getString()) ? friendColors : colors);
}
float hpOffset = 3f;
float out = 0.5f;
if (!remove.getValueByName("Полоску хп").get()) {
String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
DisplayUtils.drawRectBuilding(position.x - hpOffset, position.y, position.x - hpOffset + 1, position.w, ColorUtils.rgba(0, 0, 0, 128));
Score score = mc.world.getScoreboard().getOrCreateScore(entity.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
float hp = entity.getHealth();
float maxHp = entity.getMaxHealth();
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
hp = score.getScorePoints();
maxHp = 20;
}
DisplayUtils.drawMCVerticalBuilding(position.x - hpOffset, position.y + (position.w - position.y) * (1 - MathHelper.clamp(hp / maxHp, 0, 1)), position.x - hpOffset + 1, position.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.w : colors.w, FriendStorage.isFriend(entity.getName().getString()) ? friendColors.x : colors.x);
}
}
}
Tessellator.getInstance().draw();
RenderSystem.shadeModel(7424);
RenderSystem.enableTexture();
RenderSystem.disableBlend();
for (Map.Entry<Entity, Vector4f> entry : positions.entrySet()) {
Entity entity = entry.getKey();
if (entity instanceof LivingEntity living) {
Score score = mc.world.getScoreboard().getOrCreateScore(living.getScoreboardName(), mc.world.getScoreboard().getObjectiveInDisplaySlot(2));
float hp = living.getHealth();
float maxHp = living.getMaxHealth();
String header = mc.ingameGUI.getTabList().header == null ? " " : mc.ingameGUI.getTabList().header.getString().toLowerCase();
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
hp = score.getScorePoints();
maxHp = 20;
}
Vector4f position = entry.getValue();
float width = position.z - position.x;
GL11.glPushMatrix();
String friendPrefix = FriendStorage.isFriend(entity.getName().getString()) ? TextFormatting.GREEN + "[F] " : "";
String creativePrefix = "";
if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative()) {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + "GM" + TextFormatting.GRAY + "]";
} else {
if (mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP.contains("funtime") && (header.contains("анархия") || header.contains("гриферский"))) {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + (int) hp + TextFormatting.GRAY + "]";
} else {
creativePrefix = TextFormatting.GRAY + " [" + TextFormatting.RED + ((int) hp + (int) living.getAbsorptionAmount()) + TextFormatting.GRAY + "]";
}
}
healthAnimation = MathUtil.fast(healthAnimation, MathHelper.clamp(hp / maxHp, 0, 1), 10);
TextComponent name = (TextComponent) ITextComponent.getTextComponentOrEmpty(friendPrefix);
int colorRect = FriendStorage.isFriend(entity.getName().getString()) ? ColorUtils.rgba(66, 163, 60, 120) : ColorUtils.rgba(10, 10, 10, 120);
name.append(FriendStorage.isFriend(entity.getName().getString()) ? ITextComponent.getTextComponentOrEmpty(TextFormatting.RED + "protected") : entity.getDisplayName());
name.appendString(creativePrefix);
glCenteredScale(position.x + width / 2f - length / 2f - 4, position.y - 9, length + 8, 13, 0.5f);
length = ClientFonts.msBold[24].getWidth(name.getString());
DisplayUtils.drawRoundedRect(position.x + width / 2f - length / 2f -12.5f, position.y - 15.5f, length + 16, 17, 2,ColorUtils.rgba(17,17,17,100));
Fonts.damage.drawText(e.getMatrixStack(),"C",position.x + width / 2f - length / 2f - 11,position.y - 12.5f,ColorUtils.red,10);
ClientFonts.msBold[24].drawString(e.getMatrixStack(), name.getString(), position.x + width / 2f - length / 2f, position.y - 12.5f, -1);
GL11.glPopMatrix();
if (!remove.getValueByName("Список эффектов").get()) {
drawPotions(e.getMatrixStack(), living, position.z + 2, position.y);
}
drawItems(e.getMatrixStack(), living, (int) (position.x + width / 2f), (int) (position.y - 14.5f));
} else if (entity instanceof ItemEntity item) {
Vector4f position = entry.getValue();
float width = position.z - position.x;
float length = mc.fontRenderer.getStringPropertyWidth(entity.getDisplayName());
GL11.glPushMatrix();
glCenteredScale(position.x + width / 2f - length / 2f, position.y - 7, length, 10, 0.5f);
float width1 = ClientFonts.msBold[24].getWidth(entity.getDisplayName().getString());
DisplayUtils.drawRoundedRect(position.x + width / 2f - length / 2f - 2, position.y -12,width1 + 4 ,20,1,ColorUtils.rgb(17,17,17));
ClientFonts.msBold[24].drawString(e.getMatrixStack(), entity.getDisplayName(), position.x + width / 2f - length / 2f, position.y - 7, -1);
GL11.glPopMatrix();
}
}
}
public boolean isInView(Entity ent) {
if (mc.getRenderViewEntity() == null) {
return false;
}
frustum.setCameraPosition(mc.getRenderManager().info.getProjectedView().x, mc.getRenderManager().info.getProjectedView().y, mc.getRenderManager().info.getProjectedView().z);
return frustum.isBoundingBoxInFrustum(ent.getBoundingBox()) || ent.ignoreFrustumCheck;
}
int index = 0;
private void drawPotions(MatrixStack matrixStack, LivingEntity entity, float posX, float posY) {
for (Iterator var8 = entity.getActivePotionEffects().iterator(); var8.hasNext(); ++index) {
EffectInstance effectInstance = (EffectInstance)var8.next();
int amp = effectInstance.getAmplifier() + 1;
String ampStr = "";
if (amp >= 1 && amp <= 9) {
ampStr = " " + I18n.format("enchantment.level." + (amp + 1));
}
String text = I18n.format(effectInstance.getEffectName(), new Object[0]) + ampStr + " - " + EffectUtils.getPotionDurationString(effectInstance, 1);
PotionSpriteUploader potionspriteuploader = mc.getPotionSpriteUploader();
Effect effect = effectInstance.getPotion();
int iconSize = 8;
TextureAtlasSprite textureatlassprite = potionspriteuploader.getSprite(effect);
mc.getTextureManager().bindTexture(textureatlassprite.getAtlasTexture().getTextureLocation());
DisplayEffectsScreen.blit(matrixStack, (int)posX, (int)posY - 1, iconSize, iconSize, iconSize, textureatlassprite);
Fonts.consolas.drawTextWithOutline(matrixStack, text, posX + iconSize, posY, -1, 6, 0.05f);
posY += Fonts.consolas.getHeight(6) + 4;
}
}
private void drawItems(MatrixStack matrixStack, LivingEntity entity, int posX, int posY) {
int size = 8;
int padding = 6;
float fontHeight = Fonts.consolas.getHeight(6);
List<ItemStack> items = new ArrayList<>();
ItemStack mainStack = entity.getHeldItemMainhand();
if (!mainStack.isEmpty()) {
items.add(mainStack);
}
for (ItemStack itemStack : entity.getArmorInventoryList()) {
if (itemStack.isEmpty()) continue;
items.add(itemStack);
}
ItemStack offStack = entity.getHeldItemOffhand();
if (!offStack.isEmpty()) {
items.add(offStack);
}
posX -= (items.size() * (size + padding)) / 2f;
for (ItemStack itemStack : items) {
if (itemStack.isEmpty()) continue;
GL11.glPushMatrix();
glCenteredScale(posX, posY - 5, size / 2f, size / 2f, 0.5f);
mc.getItemRenderer().renderItemAndEffectIntoGUI(itemStack, posX, posY - 5);
mc.getItemRenderer().renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, posX, posY - 5, null);
GL11.glPopMatrix();
if (itemStack.isEnchanted() && !remove.getValueByName("Зачарования").get()) {
int ePosY = (int) (posY - fontHeight);
Map<Enchantment, Integer> enchantmentsMap = EnchantmentHelper.getEnchantments(itemStack);
for (Enchantment enchantment : enchantmentsMap.keySet()) {
int level = enchantmentsMap.get(enchantment);
if (level < 1 || !enchantment.canApply(itemStack)) continue;
IFormattableTextComponent iformattabletextcomponent = new TranslationTextComponent(enchantment.getName());
String enchText = iformattabletextcomponent.getString().substring(0, 2) + level;
Fonts.consolas.drawText(matrixStack, enchText, posX, ePosY - 5, -1, 6, 0.05f);
ePosY -= (int) fontHeight;
}
}
posX += size + padding;
}
}
public boolean isValid(Entity e) {
if (AntiBot.isBot(e)) return false;
return isInView(e);
}
public static void drawMcRect(
double left,
double top,
double right,
double bottom,
int color) {
if (left < right) {
double i = left;
left = right;
right = i;
}
if (top < bottom) {
double j = top;
top = bottom;
bottom = j;
}
float f3 = (float) (color >> 24 & 255) / 255.0F;
float f = (float) (color >> 16 & 255) / 255.0F;
float f1 = (float) (color >> 8 & 255) / 255.0F;
float f2 = (float) (color & 255) / 255.0F;
BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer();
bufferbuilder.pos(left, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(right, bottom, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(right, top, 1.0F).color(f, f1, f2, f3).endVertex();
bufferbuilder.pos(left, top, 1.0F).color(f, f1, f2, f3).endVertex();
}
public void glCenteredScale(final float x, final float y, final float w, final float h, final float f) {
glTranslatef(x + w / 2, y + h / 2, 0);
glScalef(f, f, 1);
glTranslatef(-x - w / 2, -y - h / 2, 0);
}
}
Всем спасибо за уделенное время.
Пишите какой гайд вам бы было интересно увидеть тут!
Пишите какой гайд вам бы было интересно увидеть тут!
Последнее редактирование: