How do I make a block render exactly like an End Portal block?

Started by RedpikminMCreator on

Topic category: Help with Minecraft modding (Java Edition)

Joined Nov 2024
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
How do I make a block render exactly like an End Portal block?

In Survival Expansion, I am planning to add a dimension called the Cosmic Space, a limbo-like alternate End dimension with the portal looking like the End portal. How do I make the Cosmic Space portal block render like an End portal block?

Joined Mar 2024
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
json. {   "vertex": …
Tue, 12/16/2025 - 11:41

json.

{
   "vertex": "rendertype_end_portal",
   "fragment": "rendertype_end_portal",
   "samplers": [
       { "name": "Sampler0" },
       { "name": "Sampler1" }
   ],
   "uniforms": [
       { "name": "ModelViewMat", "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": "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": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] },
       { "name": "EndPortalLayers", "type": "int", "count": 1, "values": [ 15 ] }
   ]
}
fsh.

#version 150

#moj_import <matrix.glsl>

uniform sampler2D Sampler0;
uniform sampler2D Sampler1;

uniform float GameTime;
uniform int EndPortalLayers;

in vec4 texProj0;

const vec3[] COLORS = vec3[](
   vec3(0.022087, 0.098399, 0.110818),
   vec3(0.011892, 0.095924, 0.089485),
   vec3(0.027636, 0.101689, 0.100326),
   vec3(0.046564, 0.109883, 0.114838),
   vec3(0.064901, 0.117696, 0.097189),
   vec3(0.063761, 0.086895, 0.123646),
   vec3(0.084817, 0.111994, 0.166380),
   vec3(0.097489, 0.154120, 0.091064),
   vec3(0.106152, 0.131144, 0.195191),
   vec3(0.097721, 0.110188, 0.187229),
   vec3(0.133516, 0.138278, 0.148582),
   vec3(0.070006, 0.243332, 0.235792),
   vec3(0.196766, 0.142899, 0.214696),
   vec3(0.047281, 0.315338, 0.321970),
   vec3(0.204675, 0.390010, 0.302066),
   vec3(0.080955, 0.314821, 0.661491)
);

const mat4 SCALE_TRANSLATE = mat4(
   0.5, 0.0, 0.0, 0.25,
   0.0, 0.5, 0.0, 0.25,
   0.0, 0.0, 1.0, 0.0,
   0.0, 0.0, 0.0, 1.0
);

mat4 end_portal_layer(float layer) {
   mat4 translate = mat4(
       1.0, 0.0, 0.0, 17.0 / layer,
       0.0, 1.0, 0.0, (2.0 + layer / 1.5) * (GameTime * 1.5),
       0.0, 0.0, 1.0, 0.0,
       0.0, 0.0, 0.0, 1.0
   );

   mat2 rotate = mat2_rotate_z(radians((layer * layer * 4321.0 + layer * 9.0) * 2.0));

   mat2 scale = mat2((4.5 - layer / 4.0) * 2.0);

   return mat4(scale * rotate) * translate * SCALE_TRANSLATE;
}

out vec4 fragColor;

void main() {
   vec3 color = textureProj(Sampler0, texProj0).rgb * COLORS[0];
   for (int i = 0; i < EndPortalLayers; i++) {
       color += textureProj(Sampler1, texProj0 * end_portal_layer(float(i + 1))).rgb * COLORS[i];
   }
   fragColor = vec4(color, 1.0);
}
 

vsh.

#version 150

#moj_import <projection.glsl>

in vec3 Position;

uniform mat4 ModelViewMat;
uniform mat4 ProjMat;

out vec4 texProj0;

void main() {
   gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);

   texProj0 = projection_from_position(gl_Position);
}
 

I assume you understand what to do