Начинающий
- Статус
- Оффлайн
- Регистрация
- 4 Апр 2024
- Сообщения
- 52
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Сделал за минут 15, просто решил дополнить этот клиент довольно дефолт функцией. Возможно буду делать партиклы для rockstar 2.0.
SS:
DW:
Chinahat.java:
ChinahatModuel.java (для чекбоксов и т.д) :
P.S: не бейте меня, я просто сделал деф функцию, которой не было в рокстаре
Жду когда проверят =)
SS:
DW:
Chinahat.java:
Java:
package moscow.rockstar.utility.render;
import com.mojang.blaze3d.systems.RenderSystem;
import moscow.rockstar.Rockstar;
import moscow.rockstar.utility.colors.ColorRGBA;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
public final class Chinahat {
private static final MinecraftClient mc = MinecraftClient.getInstance();
public static void render(
LivingEntity entity,
MatrixStack matrices,
Camera camera,
float tickDelta,
float width,
float height,
ColorRGBA hatColor,
float alphaVal
) {
if (entity == null || mc.world == null) {
return;
}
if (entity == mc.player && mc.options.getPerspective().isFirstPerson()) {
return;
}
ColorRGBA themeColor = Rockstar.getInstance()
.getThemeManager()
.getCurrentTheme()
.getAdditionalColor();
ColorRGBA finalColor = hatColor != null ? hatColor : themeColor;
Vec3d interpolatedPos = Utils.getInterpolatedPos(entity, tickDelta);
Vec3d cameraPos = camera.getPos();
double hatX = interpolatedPos.x - cameraPos.getX();
double hatY = interpolatedPos.y + entity.getHeight() - cameraPos.getY(); // Attach to head
double hatZ = interpolatedPos.z - cameraPos.getZ();
matrices.push();
matrices.translate(hatX, hatY, hatZ);
drawConeHat(matrices, finalColor, width, height, alphaVal);
matrices.pop();
}
private static void drawConeHat(
MatrixStack matrices,
ColorRGBA color,
float radius,
float coneHeight,
float alpha
) {
float r = color.getRed() / 255.0F;
float g = color.getGreen() / 255.0F;
float b = color.getBlue() / 255.0F;
float a = alpha;
RenderSystem.enableBlend();
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
RenderSystem.lineWidth(40f);
int segments = 32;
BufferBuilder buffer = RenderSystem.renderThreadTesselator().begin(DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR);
Matrix4f matrix = matrices.peek().getPositionMatrix();
for (int i = 0; i < segments; i++) {
float angle1 = (float) (2 * Math.PI * i / segments);
float angle2 = (float) (2 * Math.PI * (i + 1) / segments);
float x1 = radius * (float) Math.cos(angle1);
float z1 = radius * (float) Math.sin(angle1);
float x2 = radius * (float) Math.cos(angle2);
float z2 = radius * (float) Math.sin(angle2);
buffer.vertex(matrix, x1, 0, z1).color(r, g, b, a);
buffer.vertex(matrix, x2, 0, z2).color(r, g, b, a);
buffer.vertex(matrix, 0, coneHeight, 0).color(r, g, b, a);
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
buffer = RenderSystem.renderThreadTesselator().begin(DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
matrix = matrices.peek().getPositionMatrix();
buffer.vertex(matrix, 0, 0, 0).color(r, g, b, a);
for (int i = 0; i <= segments; i++) {
float angle = (float) (2 * Math.PI * i / segments);
float x = radius * (float) Math.cos(angle);
float z = radius * (float) Math.sin(angle);
buffer.vertex(matrix, x, 0, z).color(r, g, b, a);
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
buffer = RenderSystem.renderThreadTesselator().begin(DrawMode.DEBUG_LINE_STRIP, VertexFormats.POSITION_COLOR);
matrix = matrices.peek().getPositionMatrix();
for (int i = 0; i <= segments; i++) {
float angle = (float) (2 * Math.PI * i / segments);
float x = radius * (float) Math.cos(angle);
float z = radius * (float) Math.sin(angle);
buffer.vertex(matrix, x, 0, z).color(r, g, b, 1.0f); // Full opacity for outline
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
RenderSystem.lineWidth(1.0f);
RenderSystem.disableBlend();
}
}
ChinahatModuel.java (для чекбоксов и т.д) :
Java:
package moscow.rockstar.systems.modules.modules.visuals;
import moscow.rockstar.systems.event.EventListener;
import moscow.rockstar.systems.event.impl.render.Render3DEvent;
import moscow.rockstar.systems.modules.api.ModuleCategory;
import moscow.rockstar.systems.modules.api.ModuleInfo;
import moscow.rockstar.systems.modules.impl.BaseModule;
import moscow.rockstar.systems.setting.settings.BooleanSetting;
import moscow.rockstar.systems.setting.settings.ColorSetting;
import moscow.rockstar.systems.setting.settings.SliderSetting;
import moscow.rockstar.utility.colors.ColorRGBA;
import moscow.rockstar.utility.render.Chinahat;
import moscow.rockstar.utility.render.RenderUtility;
import net.minecraft.client.network.AbstractClientPlayerEntity;
@ModuleInfo(
name = "Chinahat",
desc = "Китайская шляпка над головой.",
category = ModuleCategory.VISUALS
)
public class ChinahatModule extends BaseModule {
private final BooleanSetting renderOwnPlayer = new BooleanSetting(
this,
"Для себя",
"Отображать шляпу над вашей головой"
).enabled(false);
private final BooleanSetting renderPlayers = new BooleanSetting(
this,
"Для остальных",
"Отображать шляпку над другими."
).enabled(true);
private final SliderSetting width = new SliderSetting(
this,
"Ширина",
"Ширина шляпки",
() -> !this.renderOwnPlayer.isEnabled()
).min(0.2F).max(3.0F).step(0.1F).currentValue(1.0F);
private final SliderSetting height = new SliderSetting(
this,
"Высота",
"Высота шляпки",
() -> !this.renderOwnPlayer.isEnabled()
).min(0.05F).max(0.8F).step(0.05F).currentValue(0.25F);
private final ColorSetting color = new ColorSetting(
this,
"Цвет",
() -> !this.renderOwnPlayer.isEnabled()
).color(new ColorRGBA(100, 150, 200, 255)).alpha(true);
private final SliderSetting alpha = new SliderSetting(
this,
"Прозрачность",
"Прозрачность шляпки",
() -> !this.renderOwnPlayer.isEnabled()
).min(0.0F).max(1.0F).step(0.05F).currentValue(0.85F);
private final SliderSetting widthOthers = new SliderSetting(
this,
"Ширина для других",
"Ширина шляпки для других игроков",
() -> !this.renderPlayers.isEnabled()
).min(0.2F).max(3.0F).step(0.1F).currentValue(1.0F);
private final SliderSetting heightOthers = new SliderSetting(
this,
"Высота для других",
"Высота шляпки для других игроков",
() -> !this.renderPlayers.isEnabled()
).min(0.05F).max(0.8F).step(0.05F).currentValue(0.25F);
private final ColorSetting colorOthers = new ColorSetting(
this,
"Цвет для других",
() -> !this.renderPlayers.isEnabled()
).color(new ColorRGBA(100, 150, 200, 255)).alpha(true);
private final SliderSetting alphaOthers = new SliderSetting(
this,
"Прозрачность для других",
"Прозрачность шляпки для других игроков",
() -> !this.renderPlayers.isEnabled()
).min(0.0F).max(1.0F).step(0.05F).currentValue(0.85F);
private final EventListener<Render3DEvent> onRender3D = event -> {
if (mc.world == null || mc.player == null) {
return;
}
RenderUtility.setupRender3D(true);
for (AbstractClientPlayerEntity player : mc.world.getPlayers()) {
if (player == mc.player && !this.renderOwnPlayer.isEnabled()) {
continue;
}
if (player != mc.player && !this.renderPlayers.isEnabled()) {
continue;
}
boolean isSelf = player == mc.player;
float width = isSelf ? this.width.getCurrentValue() : this.widthOthers.getCurrentValue();
float height = isSelf ? this.height.getCurrentValue() : this.heightOthers.getCurrentValue();
ColorRGBA color = isSelf ? this.color.getColor() : this.colorOthers.getColor();
float alpha = isSelf ? this.alpha.getCurrentValue() : this.alphaOthers.getCurrentValue();
Chinahat.render(
player,
event.getMatrices(),
mc.gameRenderer.getCamera(),
event.getTickDelta(),
width,
height,
color,
0.3f + alpha * 0.7f
);
}
RenderUtility.endRender3D();
};
}
P.S: не бейте меня, я просто сделал деф функцию, которой не было в рокстаре
Жду когда проверят =)