Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ public static void init() {
ZaWarudoShaderHandler.INSTANCE.init();
CrimsonShaderHandler.INSTANCE.init();
EpitaphVignetteShaderHandler.INSTANCE.init();
MandomRewindShaderHandler.INSTANCE.init();

// Renderer registration
// JArmorRendererRegistry.registerArmorRenderers();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import net.arna.jcraft.client.renderer.effects.TimeErasePredictionEffectRenderer;
import net.arna.jcraft.client.rendering.DamageIndicatorManager;
import net.arna.jcraft.client.rendering.handler.CrimsonShaderHandler;
import net.arna.jcraft.client.rendering.handler.MandomRewindShaderHandler;
import net.arna.jcraft.client.rendering.handler.ZaWarudoShaderHandler;
import net.arna.jcraft.client.util.JClientUtils;
import net.arna.jcraft.common.config.ConfigOption;
Expand Down Expand Up @@ -532,6 +533,11 @@ public static void handleShaderActivation(final @NonNull Minecraft client, final


});
case MANDOM_REWIND -> client.execute(() -> {
MandomRewindShaderHandler mandomHandler = MandomRewindShaderHandler.INSTANCE;
mandomHandler.duration = duration;
mandomHandler.shouldRender = true;
});
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package net.arna.jcraft.client.rendering.handler;

import com.mojang.blaze3d.vertex.PoseStack;
import lombok.NonNull;
import net.arna.jcraft.JCraft;
import net.arna.jcraft.client.rendering.api.PostEffect;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;

public class MandomRewindShaderHandler extends StandShaderHandler {
public static final MandomRewindShaderHandler INSTANCE = new MandomRewindShaderHandler();
private static final PostEffect EFFECT = new PostEffect(JCraft.id("shaders/post/mandom_rewind.json"));

public int duration = 10;

private MandomRewindShaderHandler() {
if (INSTANCE != null) throw new IllegalStateException("An instance already exists.");
}

@Override
public void onWorldRendered(final @NonNull PoseStack matrices, final @NonNull Camera camera, final float tickDelta, final long nanoTime) {
if (renderingEffect) {
float progress = (float) ticks / (float) duration;
float intensity = 1.0f - progress;
EFFECT.getUniform("Intensity").set(intensity);
}
}

@Override
public void renderEffect(final float tickDelta) {
if (renderingEffect) {
EFFECT.render(tickDelta);
}
}

@Override
public void tick(Minecraft client) {
if (!shouldRender) {
renderingEffect = false;
return;
}

if (!renderingEffect) {
ticks = 0;
renderingEffect = true;
}

ticks++;

if (ticks >= duration) {
renderingEffect = false;
shouldRender = false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@
import net.arna.jcraft.common.entity.stand.MandomEntity;
import net.arna.jcraft.common.marker.BlockMarker;
import net.arna.jcraft.common.marker.EntityMarker;
import net.arna.jcraft.common.network.s2c.ShaderActivationPacket;
import net.arna.jcraft.common.util.JUtils;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -45,14 +48,29 @@ public RewindMove(final int cooldown, final int windup, final int duration, fina

final ServerLevel level = (ServerLevel) attacker.level();

// Send shader to all entities that were tagged in countdown
final List<EntityMarker> entityMarkers = countdownMove.getTimeEntityMarkers();
for (final EntityMarker marker : entityMarkers) {
Entity entity = level.getEntity(marker.id());
if (entity instanceof ServerPlayer taggedPlayer) {
ShaderActivationPacket.send(
taggedPlayer,
taggedPlayer,
0,
10,
ShaderActivationPacket.Type.MANDOM_REWIND
);
}
}

final List<BlockMarker> blockMarkers = countdownMove.getTimeBlockMarkers();
countdownMove.setResolving(true);
for (final BlockMarker marker : blockMarkers) {
if (CountdownMove.BLOCK_MARKER_TYPE.shouldLoad(marker, level)) {
CountdownMove.BLOCK_MARKER_TYPE.load(marker, level);
}
}
final List<EntityMarker> entityMarkers = countdownMove.getTimeEntityMarkers();

for (final EntityMarker marker : entityMarkers) {
if (countdownMove.getEntityMarkerType().shouldLoad(marker, level) && JUtils.nullSafeDistanceSqr(level.getEntity(marker.id()), attacker.getUser()) <= reach * reach) {
countdownMove.getEntityMarkerType().load(marker, level);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ public static void send(ServerPlayer serverPlayerEntity, @Nullable Entity source
public enum Type implements StringRepresentable {
NONE("none"),
ZA_WARUDO("za_warudo"),
CRIMSON("crimson");
CRIMSON("crimson"),
MANDOM_REWIND("mandom_rewind");

private final String name;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "jcraft:mandom_rewind",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "minecraft:blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#version 150

uniform sampler2D DiffuseSampler;
uniform float Intensity;

in vec2 texCoord;
in vec4 vPosition;

out vec4 fragColor;

const vec3 pinkColor = vec3(1.0, 0.2, 0.6);

void main() {
vec4 color = texture(DiffuseSampler, texCoord);

// Mix the original color with pink based on intensity
vec3 flashedColor = mix(color.rgb, pinkColor, Intensity * 0.5);

fragColor = vec4(flashedColor, color.a);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
},
"vertex": "jcraft:position_getter",
"fragment": "jcraft:mandom_rewind",
"attributes": [
"Position"
],
"samplers": [
{
"name": "DiffuseSampler"
}
],
"uniforms": [
{
"name": "ProjMat",
"type": "matrix4x4",
"count": 16,
"values": [
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
]
},
{
"name": "OutSize",
"type": "float",
"count": 2,
"values": [1.0, 1.0]
},
{
"name": "Intensity",
"type": "float",
"count": 1,
"values": [1.0]
}
]
}