This commit is contained in:
2026-01-07 09:36:07 +01:00
parent 84c354cf7e
commit c1b19343ae
449 changed files with 5277 additions and 2496 deletions

View File

@@ -0,0 +1,33 @@
package dev.tggamesyt.szar.client;
import dev.tggamesyt.szar.items.Joint;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.item.ItemStack;
public class SmokeZoomHandler {
private static float smokeScale = 0.5f; // start scale
private static final float TARGET_SCALE = 1.05f; // max zoom
private static final float LERP_SPEED = 0.5f; // lerp speed
public static void register() {
ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (client.player == null) return;
ItemStack stack = client.player.getActiveItem();
boolean usingSmoke = stack.getItem() instanceof Joint;
float target = usingSmoke ? TARGET_SCALE : 0.5f;
// lerp smokeScale toward target like spyglass
smokeScale = lerp(LERP_SPEED * client.getTickDelta(), smokeScale, target);
});
}
private static float lerp(float delta, float start, float end) {
return start + delta * (end - start);
}
public static float getSmokeScale() {
return smokeScale;
}
}

View File

@@ -8,14 +8,19 @@ import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.render.*;
import net.minecraft.client.render.entity.model.BipedEntityModel;
import net.minecraft.client.render.entity.model.EntityModelLayers;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
public class SzarClient implements ClientModInitializer {
@@ -42,44 +47,75 @@ public class SzarClient implements ClientModInitializer {
Szar.CANNABIS_BLOCK,
RenderLayer.getCutout()
);
WorldRenderEvents.AFTER_TRANSLUCENT.register(context -> {
HudRenderCallback.EVENT.register((drawContext, tickDelta) -> {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player != null && client.player.hasStatusEffect(Szar.DROG_EFFECT)) {
float time = client.player.age + client.getTickDelta();
float hue = (time * 0.01f) % 1f;
int rgb = MathHelper.hsvToRgb(hue, 1f, 1f);
if (client.player == null) return;
if (!client.player.hasStatusEffect(Szar.DROG_EFFECT)) return;
float alpha = 0.25f;
float r = ((rgb >> 16) & 0xFF) / 255f;
float g = ((rgb >> 8) & 0xFF) / 255f;
float b = (rgb & 0xFF) / 255f;
var effect = client.player.getStatusEffect(Szar.DROG_EFFECT);
int amplifier = effect.getAmplifier(); // 0 = level I
int width = client.getWindow().getFramebufferWidth();
int height = client.getWindow().getFramebufferHeight();
float level = amplifier + 1f;
float time = client.player.age + tickDelta;
RenderSystem.disableDepthTest();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
/* ───── Color speed (gentle ramp) ───── */
float speed = 0.015f + amplifier * 0.012f;
float hue = (time * speed) % 1.0f;
// ✅ Correct shader for 1.20.1 colored quads
RenderSystem.setShader(GameRenderer::getPositionColorProgram);
int rgb = MathHelper.hsvToRgb(hue, 0.95f, 1f);
BufferBuilder buffer = Tessellator.getInstance().getBuffer();
buffer.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
/* ───── Alpha (mostly stable) ───── */
float pulse =
(MathHelper.sin(time * (0.04f + amplifier * 0.015f)) + 1f) * 0.5f;
buffer.vertex(0, height, 0).color(r, g, b, alpha).next();
buffer.vertex(width, height, 0).color(r, g, b, alpha).next();
buffer.vertex(width, 0, 0).color(r, g, b, alpha).next();
buffer.vertex(0, 0, 0).color(r, g, b, alpha).next();
float alpha = MathHelper.clamp(
0.20f + amplifier * 0.10f + pulse * 0.10f,
0.20f,
0.70f
);
Tessellator.getInstance().draw();
/* ───── Very subtle jitter ───── */
float jitter = 0.15f * amplifier;
float jitterX = (client.world.random.nextFloat() - 0.5f) * jitter;
float jitterY = (client.world.random.nextFloat() - 0.5f) * jitter;
RenderSystem.disableBlend();
RenderSystem.enableDepthTest();
int width = client.getWindow().getScaledWidth();
int height = client.getWindow().getScaledHeight();
int color =
((int)(alpha * 255) << 24)
| (rgb & 0x00FFFFFF);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
drawContext.getMatrices().push();
drawContext.getMatrices().translate(jitterX, jitterY, 0);
drawContext.fill(0, 0, width, height, color);
drawContext.getMatrices().pop();
RenderSystem.disableBlend();
});
HudRenderCallback.EVENT.register((drawContext, tickDelta) -> {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player == null) return;
float scale = SmokeZoomHandler.getSmokeScale();
if (scale > 0.51f) { // only when smoking
client.inGameHud.spyglassScale = scale;
}
});
SmokeZoomHandler.register();
// In your mod initialization code
FabricModelPredicateProviderRegistry.register(Szar.WEED_JOINT_ITEM, new Identifier("held"),
(stack, world, entity, seed) -> {
return entity != null && entity.getMainHandStack() == stack ? 1.0f : 0.0f;
});
}
}