Начинающий
- Статус
- Оффлайн
- Регистрация
- 9 Май 2023
- Сообщения
- 261
- Реакции
- 8
- Выберите загрузчик игры
- Fabric
Скид кольца из рокстара/эксселента
UPD
Улучшил рендер и оптимизацию. Теперь выглядит в разы лучше
UPD
Улучшил рендер и оптимизацию. Теперь выглядит в разы лучше

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
//Краснение
private int applyDamageFlash(int color) {
if (!damageRed.isEnabled()) return color;
float targetIntensity = 0f;
long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
targetIntensity = 1.0f - easeOutCubic(progress);
}
damageFlashIntensity = MathHelper.lerp(0.1f, damageFlashIntensity, targetIntensity);
if (damageFlashIntensity < 0.05f) return color;
int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF, a = (color >> 24) & 0xFF;
int finalR = (int) MathHelper.lerp(damageFlashIntensity, r, 255);
int finalG = (int) MathHelper.lerp(damageFlashIntensity, g, 50);
int finalB = (int) MathHelper.lerp(damageFlashIntensity, b, 50);
return (a << 24) | (finalR << 16) | (finalG << 8) | finalB;
}
//Само кольцо
private void renderJello(EventRender3D event) {
jelloMoving += 4f;
float alpha = this.animationProgress;
if (alpha <= 0.0F) return;
LivingEntity entityToRender = this.target != null ? this.target : this.lastTarget;
if (entityToRender == null) return;
Camera camera = mc.getEntityRenderDispatcher().camera;
Vec3d cameraPos = camera.getPos();
Vec3d targetPos = MathUtil.interpolate(entityToRender);
Vec3d renderPos = targetPos.subtract(cameraPos);
float entityWidth = entityToRender.getWidth() * 1.65f;
float entityHeight = entityToRender.getHeight() - 0.15f;
float alphaAnim = (this.target != null) ? easeOutCubic(alpha) : easeOutQuad(alpha);
int color = getThemeColor();
MatrixStack matrices = event.getMatrix();
RenderSystem.enableBlend();
RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
RenderSystem.disableCull();
if (throughWalls.isEnabled()) {
RenderSystem.disableDepthTest();
} else {
RenderSystem.enableDepthTest();
RenderSystem.depthMask(false);
}
matrices.push();
matrices.translate(renderPos.x, renderPos.y, renderPos.z);
RenderSystem.setShaderTexture(0, glowTexture);
RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
BufferBuilder buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
for (int i = 0; i < 360; i += 2) {
float scale = Math.max(0.5f, 0.7f - 0.2f * alphaAnim);
double rad = Math.toRadians(i + jelloMoving);
float xOffset = (float) (Math.cos(rad) * entityWidth * scale);
float zOffset = (float) (Math.sin(rad) * entityWidth * scale);
float sizeBase = 0.2f;
for (int j = 0; j < 15; ++j) {
float yOffsetLayer = entityHeight / 1.7f + (entityHeight / 2.0f) * (float) Math.cos(Math.toRadians(jelloMoving / 1.5f + j * 2.0f));
matrices.push();
matrices.translate(xOffset, yOffsetLayer, zOffset);
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));
MatrixStack.Entry entry = matrices.peek();
int finalAlpha = (int) (255 * alphaAnim * ((float) j / 15.0f) * 0.05f);
int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF;
buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, sizeBase / 2.0f, 0).texture(1, 1).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, sizeBase / 2.0f, 0).texture(0, 1).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
matrices.pop();
}
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
matrices.pop();
matrices.push();
matrices.translate(renderPos.x, renderPos.y, renderPos.z);
RenderSystem.setShaderTexture(0, glowTexture);
RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
for (int i = 0; i < 360; i += 2) {
float scale = Math.max(0.5f, 0.7f - 0.2f * alphaAnim);
double rad = Math.toRadians(i + jelloMoving);
float xOffset = (float) (Math.cos(rad) * entityWidth * scale);
float zOffset = (float) (Math.sin(rad) * entityWidth * scale);
float yOffset = entityHeight / 1.75f + (entityHeight / 2.0f) * (float) Math.cos(Math.toRadians(jelloMoving / 1.5f + 30.0f));
float sizeLarge = 0.2f;
matrices.push();
matrices.translate(xOffset, yOffset, zOffset);
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));
MatrixStack.Entry entry = matrices.peek();
int finalAlpha = (int) (255 * alphaAnim * 0.2f);
int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF;
buffer.vertex(entry.getPositionMatrix(), -sizeLarge / 2.0f, -sizeLarge / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), sizeLarge / 2.0f, -sizeLarge / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), sizeLarge / 2.0f, sizeLarge / 2.0f, 0).texture(1, 1).color(r, g, b, finalAlpha);
buffer.vertex(entry.getPositionMatrix(), -sizeLarge / 2.0f, sizeLarge / 2.0f, 0).texture(0, 1).color(r, g, b, finalAlpha);
matrices.pop();
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
matrices.pop();
if (!throughWalls.isEnabled()) {
RenderSystem.depthMask(true);
}
RenderSystem.enableDepthTest();
RenderSystem.enableCull();
RenderSystem.defaultBlendFunc();
RenderSystem.disableBlend();
}
Последнее редактирование:

