R3TR0st

Untitled

Apr 10th, 2025
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.68 KB | None | 0 0
  1. package net.mcreator.clrx.procedures;
  2.  
  3. /* imports omitted */
  4.  
  5. @Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
  6. public class SkyboxRenderOnTickProcedure {
  7. private static int ticks = 0;
  8. private static float partialTick = 0.0F;
  9. private static PoseStack poseStack = null;
  10. private static Matrix4f projectionMatrix = null;
  11. private static Runnable setupFog = null;
  12. private static VertexBuffer abyssBuffer = null;
  13. private static VertexBuffer deepSkyBuffer = null;
  14. private static VertexBuffer skyboxBuffer = null;
  15. private static VertexBuffer starBuffer = null;
  16. private static int amount = 0;
  17. private static int seed = 0;
  18. private static final Predicate<Object[]> PREDICATE = params -> {
  19. ticks = (Integer) params[1];
  20. partialTick = (Float) params[2];
  21. poseStack = (PoseStack) params[3];
  22. projectionMatrix = (Matrix4f) params[5];
  23. setupFog = (Runnable) params[7];
  24. FogRenderer.levelFogColor();
  25. setupFog.run();
  26. Minecraft minecraft = Minecraft.getInstance();
  27. Entity entity = minecraft.gameRenderer.getMainCamera().getEntity();
  28. if (entity != null) {
  29. ClientLevel level = minecraft.level;
  30. Vec3 pos = entity.getPosition(partialTick);
  31. execute(null, level.dimension());
  32. return true;
  33. }
  34. return false;
  35. };
  36.  
  37. public static void renderAbyss(int color, boolean constant) {
  38. Minecraft minecraft = Minecraft.getInstance();
  39. boolean visible = minecraft.player.getEyePosition(partialTick).y() - minecraft.level.getLevelData().getHorizonHeight(minecraft.level) < 0.0D;
  40. if (visible || constant) {
  41. if (abyssBuffer == null) {
  42. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  43. RenderSystem.setShader(GameRenderer::getPositionShader);
  44. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  45. bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION);
  46. bufferBuilder.vertex(0.0F, -16.0F, 0.0F).endVertex();
  47. for (int i = 0; i <= 8; ++i) {
  48. bufferBuilder.vertex(-512.0F * Mth.cos(i * 45.0F * Mth.DEG_TO_RAD), -16.0F, 512.0F * Mth.sin(i * 45.0F * Mth.DEG_TO_RAD)).endVertex();
  49. }
  50. abyssBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC);
  51. abyssBuffer.bind();
  52. abyssBuffer.upload(bufferBuilder.end());
  53. } else {
  54. abyssBuffer.bind();
  55. }
  56. poseStack.pushPose();
  57. poseStack.translate(0.0F, 12.0F, 0.0F);
  58. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, (color >>> 24) / 255.0F);
  59. abyssBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader());
  60. VertexBuffer.unbind();
  61. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  62. poseStack.popPose();
  63. }
  64. }
  65.  
  66. public static void renderDeepSky(int color) {
  67. if (deepSkyBuffer == null) {
  68. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  69. RenderSystem.setShader(GameRenderer::getPositionShader);
  70. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  71. bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION);
  72. bufferBuilder.vertex(0.0F, 16.0F, 0.0F).endVertex();
  73. for (int i = 0; i <= 8; ++i) {
  74. bufferBuilder.vertex(512.0F * Mth.cos(45.0F * i * Mth.DEG_TO_RAD), 16.0F, 512.0F * Mth.sin(45.0F * i * Mth.DEG_TO_RAD)).endVertex();
  75. }
  76. deepSkyBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC);
  77. deepSkyBuffer.bind();
  78. deepSkyBuffer.upload(bufferBuilder.end());
  79. } else {
  80. deepSkyBuffer.bind();
  81. }
  82. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, (color >>> 24) / 255.0F);
  83. deepSkyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader());
  84. VertexBuffer.unbind();
  85. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  86. }
  87.  
  88. public static void renderEndSky(float yaw, float pitch, float roll, int color, boolean constant) {
  89. Minecraft minecraft = Minecraft.getInstance();
  90. Vec3 pos = minecraft.gameRenderer.getMainCamera().getPosition();
  91. boolean invisible = minecraft.level.effects().isFoggyAt(Mth.floor(pos.x()), Mth.floor(pos.y())) || minecraft.gui.getBossOverlay().shouldCreateWorldFog();
  92. if (!invisible || constant) {
  93. poseStack.pushPose();
  94. poseStack.mulPose(com.mojang.math.Axis.YN.rotationDegrees(yaw));
  95. poseStack.mulPose(com.mojang.math.Axis.XP.rotationDegrees(pitch));
  96. poseStack.mulPose(com.mojang.math.Axis.ZN.rotationDegrees(roll));
  97. Matrix4f matrix4f = poseStack.last().pose();
  98. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, (color >>> 24) / 255.0F);
  99. RenderSystem.setShader(GameRenderer::getPositionTexShader);
  100. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  101. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
  102. for (int i = 0; i < 6; ++i) {
  103. switch (i) {
  104. case 0 :
  105. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, -100.0F).uv(0.0F, 0.0F).endVertex();
  106. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, 100.0F).uv(0.0F, 16.0F).endVertex();
  107. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, 100.0F).uv(16.0F, 16.0F).endVertex();
  108. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, -100.0F).uv(16.0F, 0.0F).endVertex();
  109. break;
  110. case 1 :
  111. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, 100.0F).uv(0.0F, .0F).endVertex();
  112. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, 100.0F).uv(0.0F, 16.0F).endVertex();
  113. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, 100.0F).uv(16.0F, 16.0F).endVertex();
  114. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, 100.0F).uv(16.0F, 0.0F).endVertex();
  115. break;
  116. case 2 :
  117. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, -100.0F).uv(0.0F, 0.0F).endVertex();
  118. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, -100.0F).uv(0.0F, 16.0F).endVertex();
  119. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, -100.0F).uv(16.0F, 16.0F).endVertex();
  120. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, -100.0F).uv(16.0F, 0.0F).endVertex();
  121. break;
  122. case 3 :
  123. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, 100.0F).uv(0.0F, 0.0F).endVertex();
  124. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, -100.0F).uv(0.0F, 16.0F).endVertex();
  125. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, -100.0F).uv(16.0F, 16.0F).endVertex();
  126. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, 100.0F).uv(16.0F, 0.0F).endVertex();
  127. break;
  128. case 4 :
  129. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, -100.0F).uv(0.0F, 0.0F).endVertex();
  130. bufferBuilder.vertex(matrix4f, -100.0F, 100.0F, 100.0F).uv(0.0F, 16.0F).endVertex();
  131. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, 100.0F).uv(16.0F, 16.0F).endVertex();
  132. bufferBuilder.vertex(matrix4f, -100.0F, -100.0F, -100.0F).uv(16.0F, 0.0F).endVertex();
  133. break;
  134. case 5 :
  135. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, -100.0F).uv(0.0F, 0.0F).endVertex();
  136. bufferBuilder.vertex(matrix4f, 100.0F, -100.0F, 100.0F).uv(0.0F, 16.0F).endVertex();
  137. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, 100.0F).uv(16.0F, 16.0F).endVertex();
  138. bufferBuilder.vertex(matrix4f, 100.0F, 100.0F, -100.0F).uv(16.0F, 0.0F).endVertex();
  139. break;
  140. }
  141. }
  142. BufferUploader.drawWithShader(bufferBuilder.end());
  143. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  144. poseStack.popPose();
  145. }
  146. }
  147.  
  148. public static void renderMoon(float size, int color, boolean phase, boolean constant) {
  149. ClientLevel level = Minecraft.getInstance().level;
  150. float r = size / 2.0F;
  151. float u0 = 0.0F;
  152. float v0 = 0.0F;
  153. float u1 = 1.0F;
  154. float v1 = 1.0F;
  155. if (phase) {
  156. int i0 = level.getMoonPhase();
  157. int i1 = i0 & 3;
  158. int i2 = (i0 >> 2) & 1;
  159. u0 = i1 / 4.0F;
  160. v0 = i2 / 2.0F;
  161. u1 = (i1 + 1) / 4.0F;
  162. v1 = (i2 + 1) / 2.0F;
  163. }
  164. float alpha = (color >>> 24) / 255.0F;
  165. if (!constant)
  166. alpha *= (1.0F - level.getRainLevel(partialTick));
  167. poseStack.pushPose();
  168. poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(level.getTimeOfDay(partialTick) * 360.0F));
  169. Matrix4f matrix4f = poseStack.last().pose();
  170. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, alpha);
  171. RenderSystem.setShader(GameRenderer::getPositionTexShader);
  172. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  173. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
  174. bufferBuilder.vertex(matrix4f, -r, -100.0F, -r).uv(u1, v1).endVertex();
  175. bufferBuilder.vertex(matrix4f, -r, -100.0F, r).uv(u0, v1).endVertex();
  176. bufferBuilder.vertex(matrix4f, r, -100.0F, r).uv(u0, v0).endVertex();
  177. bufferBuilder.vertex(matrix4f, r, -100.0F, -r).uv(u1, v0).endVertex();
  178. BufferUploader.drawWithShader(bufferBuilder.end());
  179. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  180. poseStack.popPose();
  181. }
  182.  
  183. public static void renderSky(boolean deepSky, boolean sunlights, boolean sun, boolean moon, boolean stars, boolean abyss) {
  184. Minecraft minecraft = Minecraft.getInstance();
  185. ClientLevel level = minecraft.level;
  186. if (deepSky) {
  187. Vec3 color = level.getSkyColor(minecraft.gameRenderer.getMainCamera().getPosition(), partialTick);
  188. RenderSystem.defaultBlendFunc();
  189. renderDeepSky(255 << 24 | (int) (color.x() * 255.0D) << 16 | (int) (color.y() * 255.0D) << 8 | (int) (color.z() * 255.0D));
  190. }
  191. if (sunlights) {
  192. float[] color = level.effects().getSunriseColor(level.getTimeOfDay(partialTick), partialTick);
  193. if (color != null) {
  194. RenderSystem.defaultBlendFunc();
  195. renderSunlights((int) (color[3] * 255.0F) << 24 | (int) (color[0] * 255.0F) << 16 | (int) (color[1] * 255.0F) << 8 | (int) (color[2] * 255.0F));
  196. }
  197. }
  198. if (sun) {
  199. RenderSystem.setShaderTexture(0, new ResourceLocation("minecraft:textures/environment/sun.png"));
  200. RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
  201. renderSun(60.0F, 255 << 24 | 255 << 16 | 255 << 8 | 255, false);
  202. }
  203. if (moon) {
  204. RenderSystem.setShaderTexture(0, new ResourceLocation("minecraft:textures/environment/moon_phases.png"));
  205. RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
  206. renderMoon(40.0F, 255 << 24 | 255 << 16 | 255 << 8 | 255, true, false);
  207. }
  208. if (stars) {
  209. int color = (int) (level.getStarBrightness(partialTick) * 255.0F);
  210. RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
  211. renderStars(1500, 10842, 90.0F, level.getTimeOfDay(partialTick) * 360.0F, 0.0F, color << 24 | color << 16 | color << 8 | color, false);
  212. }
  213. if (abyss) {
  214. RenderSystem.defaultBlendFunc();
  215. renderAbyss(255 << 24 | 0 << 16 | 0 << 8 | 0, false);
  216. }
  217. }
  218.  
  219. public static void renderSkybox(float yaw, float pitch, float roll, int color, boolean constant) {
  220. Minecraft minecraft = Minecraft.getInstance();
  221. Vec3 pos = minecraft.gameRenderer.getMainCamera().getPosition();
  222. boolean invisible = minecraft.level.effects().isFoggyAt(Mth.floor(pos.x()), Mth.floor(pos.y())) || minecraft.gui.getBossOverlay().shouldCreateWorldFog();
  223. if (!invisible || constant) {
  224. if (skyboxBuffer == null) {
  225. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  226. RenderSystem.setShader(GameRenderer::getPositionTexShader);
  227. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  228. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
  229. for (int i = 0; i < 6; ++i) {
  230. switch (i) {
  231. case 0 :
  232. bufferBuilder.vertex(-0.5F, -0.5F, -0.5F).uv(0.0F, 0.0F).endVertex();
  233. bufferBuilder.vertex(-0.5F, -0.5F, 0.5F).uv(0.0F, 0.5F).endVertex();
  234. bufferBuilder.vertex(0.5F, -0.5F, 0.5F).uv(1.0F / 3.0F, 0.5F).endVertex();
  235. bufferBuilder.vertex(0.5F, -0.5F, -0.5F).uv(1.0F / 3.0F, 0.0F).endVertex();
  236. break;
  237. case 1 :
  238. bufferBuilder.vertex(-0.5F, 0.5F, 0.5F).uv(1.0F / 3.0F, 0.0F).endVertex();
  239. bufferBuilder.vertex(-0.5F, 0.5F, -0.5F).uv(1.0F / 3.0F, 0.5F).endVertex();
  240. bufferBuilder.vertex(0.5F, 0.5F, -0.5F).uv(2.0F / 3.0F, 0.5F).endVertex();
  241. bufferBuilder.vertex(0.5F, 0.5F, 0.5F).uv(2.0F / 3.0F, 0.0F).endVertex();
  242. break;
  243. case 2 :
  244. bufferBuilder.vertex(0.5F, 0.5F, 0.5F).uv(2.0F / 3.0F, 0.0F).endVertex();
  245. bufferBuilder.vertex(0.5F, -0.5F, 0.5F).uv(2.0F / 3.0F, 0.5F).endVertex();
  246. bufferBuilder.vertex(-0.5F, -0.5F, 0.5F).uv(1.0F, 0.5F).endVertex();
  247. bufferBuilder.vertex(-0.5F, 0.5F, 0.5F).uv(1.0F, 0.0F).endVertex();
  248. break;
  249. case 3 :
  250. bufferBuilder.vertex(-0.5F, 0.5F, 0.5F).uv(0.0F, 0.5F).endVertex();
  251. bufferBuilder.vertex(-0.5F, -0.5F, 0.5F).uv(0.0F, 1.0F).endVertex();
  252. bufferBuilder.vertex(-0.5F, -0.5F, -0.5F).uv(1.0F / 3.0F, 1.0F).endVertex();
  253. bufferBuilder.vertex(-0.5F, 0.5F, -0.5F).uv(1.0F / 3.0F, 0.5F).endVertex();
  254. break;
  255. case 4 :
  256. bufferBuilder.vertex(-0.5F, 0.5F, -0.5F).uv(1.0F / 3.0F, 0.5F).endVertex();
  257. bufferBuilder.vertex(-0.5F, -0.5F, -0.5F).uv(1.0F / 3.0F, 1.0F).endVertex();
  258. bufferBuilder.vertex(0.5F, -0.5F, -0.5F).uv(2.0F / 3.0F, 1.0F).endVertex();
  259. bufferBuilder.vertex(0.5F, 0.5F, -0.5F).uv(2.0F / 3.0F, 0.5F).endVertex();
  260. break;
  261. case 5 :
  262. bufferBuilder.vertex(0.5F, 0.5F, -0.5F).uv(2.0F / 3.0F, 0.5F).endVertex();
  263. bufferBuilder.vertex(0.5F, -0.5F, -0.5F).uv(2.0F / 3.0F, 1.0F).endVertex();
  264. bufferBuilder.vertex(0.5F, -0.5F, 0.5F).uv(1.0F, 1.0F).endVertex();
  265. bufferBuilder.vertex(0.5F, 0.5F, 0.5F).uv(1.0F, 0.5F).endVertex();
  266. break;
  267. }
  268. }
  269. skyboxBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC);
  270. skyboxBuffer.bind();
  271. skyboxBuffer.upload(bufferBuilder.end());
  272. } else {
  273. skyboxBuffer.bind();
  274. }
  275. float size = minecraft.options.getEffectiveRenderDistance() << 6;
  276. poseStack.pushPose();
  277. poseStack.mulPose(com.mojang.math.Axis.YN.rotationDegrees(yaw));
  278. poseStack.mulPose(com.mojang.math.Axis.XP.rotationDegrees(pitch));
  279. poseStack.mulPose(com.mojang.math.Axis.ZN.rotationDegrees(roll));
  280. poseStack.scale(size, size, size);
  281. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, (color >>> 24) / 255.0F);
  282. skyboxBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionTexShader());
  283. VertexBuffer.unbind();
  284. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  285. poseStack.popPose();
  286. }
  287. }
  288.  
  289. public static void renderStars(int amount, int seed, float yaw, float pitch, float roll, int color, boolean constant) {
  290. if (starBuffer == null || amount != SkyboxRenderOnTickProcedure.amount || seed != SkyboxRenderOnTickProcedure.seed) {
  291. SkyboxRenderOnTickProcedure.amount = amount;
  292. SkyboxRenderOnTickProcedure.seed = seed;
  293. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  294. RenderSystem.setShader(GameRenderer::getPositionShader);
  295. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  296. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION);
  297. RandomSource randomsource = RandomSource.create((long) seed);
  298. for (int i = 0; i < amount; ++i) {
  299. float f0 = randomsource.nextFloat() * 2.0F - 1.0F;
  300. float f1 = randomsource.nextFloat() * 2.0F - 1.0F;
  301. float f2 = randomsource.nextFloat() * 2.0F - 1.0F;
  302. float f3 = 0.15F + 0.1F * randomsource.nextFloat();
  303. float f4 = f0 * f0 + f1 * f1 + f2 * f2;
  304. if (f4 < 1.0F && f4 > 0.01F) {
  305. f4 = 1.0F / Mth.sqrt(f4);
  306. f0 *= f4;
  307. f1 *= f4;
  308. f2 *= f4;
  309. float f5 = f0 * 100.0F;
  310. float f6 = f1 * 100.0F;
  311. float f7 = f2 * 100.0F;
  312. float f8 = (float) Math.atan2(f0, f2);
  313. float f9 = Mth.sin(f8);
  314. float f10 = Mth.cos(f8);
  315. float f11 = (float) Math.atan2(Mth.sqrt(f0 * f0 + f2 * f2), f1);
  316. float f12 = Mth.sin(f11);
  317. float f13 = Mth.cos(f11);
  318. float f14 = (float) randomsource.nextDouble() * Mth.PI * 2.0F;
  319. float f15 = Mth.sin(f14);
  320. float f16 = Mth.cos(f14);
  321. for (int j = 0; j < 4; ++j) {
  322. float f17 = ((j & 2) - 1) * f3;
  323. float f18 = ((j + 1 & 2) - 1) * f3;
  324. float f20 = f17 * f16 - f18 * f15;
  325. float f21 = f18 * f16 + f17 * f15;
  326. float f22 = -f20 * f13;
  327. float f23 = f22 * f9 - f21 * f10;
  328. float f24 = f20 * f12;
  329. float f25 = f21 * f9 + f22 * f10;
  330. bufferBuilder.vertex(f5 + f23, f6 + f24, f7 + f25).endVertex();
  331. }
  332. }
  333. }
  334. if (starBuffer != null)
  335. starBuffer.close();
  336. starBuffer = new VertexBuffer(VertexBuffer.Usage.STATIC);
  337. starBuffer.bind();
  338. starBuffer.upload(bufferBuilder.end());
  339. } else {
  340. starBuffer.bind();
  341. }
  342. float alpha = (color >>> 24) / 255.0F;
  343. if (!constant)
  344. alpha *= (1.0F - Minecraft.getInstance().level.getRainLevel(partialTick));
  345. poseStack.pushPose();
  346. poseStack.mulPose(com.mojang.math.Axis.YN.rotationDegrees(yaw));
  347. poseStack.mulPose(com.mojang.math.Axis.XP.rotationDegrees(pitch));
  348. poseStack.mulPose(com.mojang.math.Axis.ZN.rotationDegrees(roll));
  349. FogRenderer.setupNoFog();
  350. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, alpha);
  351. starBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader());
  352. VertexBuffer.unbind();
  353. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  354. setupFog.run();
  355. poseStack.popPose();
  356. }
  357.  
  358. public static void renderSun(float size, int color, boolean constant) {
  359. ClientLevel level = Minecraft.getInstance().level;
  360. float r = size / 2.0F;
  361. float alpha = (color >>> 24) / 255.0F;
  362. if (!constant)
  363. alpha *= (1.0F - level.getRainLevel(partialTick));
  364. poseStack.pushPose();
  365. poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(level.getTimeOfDay(partialTick) * 360.0F));
  366. Matrix4f matrix4f = poseStack.last().pose();
  367. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, alpha);
  368. RenderSystem.setShader(GameRenderer::getPositionTexShader);
  369. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  370. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
  371. bufferBuilder.vertex(matrix4f, r, 100.0F, -r).uv(0.0F, 0.0F).endVertex();
  372. bufferBuilder.vertex(matrix4f, r, 100.0F, r).uv(1.0F, 0.0F).endVertex();
  373. bufferBuilder.vertex(matrix4f, -r, 100.0F, r).uv(1.0F, 1.0F).endVertex();
  374. bufferBuilder.vertex(matrix4f, -r, 100.0F, -r).uv(0.0F, 1.0F).endVertex();
  375. BufferUploader.drawWithShader(bufferBuilder.end());
  376. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  377. poseStack.popPose();
  378. }
  379.  
  380. public static void renderSunlights(int color) {
  381. ClientLevel level = Minecraft.getInstance().level;
  382. float[] rawColor = level.effects().getSunriseColor(level.getTimeOfDay(partialTick), partialTick);
  383. if (rawColor != null) {
  384. int red = color >> 16 & 255;
  385. int green = color >> 8 & 255;
  386. int blue = color & 255;
  387. int alpha = (int) ((color >>> 24) * rawColor[3]);
  388. Matrix4f matrix4f = poseStack.last().pose();
  389. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  390. RenderSystem.setShader(GameRenderer::getPositionColorShader);
  391. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  392. bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR);
  393. boolean flag = Mth.sin(level.getSunAngle(partialTick)) < 0.0F;
  394. if (flag) {
  395. bufferBuilder.vertex(matrix4f, 100.0F, 0.0F, 0.0F).color(red, green, blue, alpha).endVertex();
  396. } else {
  397. bufferBuilder.vertex(matrix4f, -100.0F, 0.0F, 0.0F).color(red, green, blue, alpha).endVertex();
  398. }
  399. for (int i = 0; i <= 16; ++i) {
  400. float deg = i * Mth.TWO_PI / 16.0F;
  401. float sin = Mth.sin(deg);
  402. float cos = Mth.cos(deg);
  403. if (flag) {
  404. bufferBuilder.vertex(matrix4f, cos * 120.0F, cos * 40.0F * rawColor[3], -sin * 120.0F).color(red, green, blue, 0).endVertex();
  405. } else {
  406. bufferBuilder.vertex(matrix4f, -cos * 120.0F, cos * 40.0F * rawColor[3], sin * 120.0F).color(red, green, blue, 0).endVertex();
  407. }
  408. }
  409. BufferUploader.drawWithShader(bufferBuilder.end());
  410. }
  411. }
  412.  
  413. public static void renderTexture(float size, float yaw, float pitch, float roll, int color, boolean constant) {
  414. float r = size / 2.0F;
  415. float alpha = (color >>> 24) / 255.0F;
  416. if (!constant)
  417. alpha *= (1.0F - Minecraft.getInstance().level.getRainLevel(partialTick));
  418. poseStack.pushPose();
  419. poseStack.mulPose(com.mojang.math.Axis.YN.rotationDegrees(yaw));
  420. poseStack.mulPose(com.mojang.math.Axis.XP.rotationDegrees(pitch));
  421. poseStack.mulPose(com.mojang.math.Axis.ZN.rotationDegrees(roll));
  422. Matrix4f matrix4f = poseStack.last().pose();
  423. RenderSystem.setShaderColor((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, alpha);
  424. RenderSystem.setShader(GameRenderer::getPositionTexShader);
  425. BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
  426. bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
  427. bufferBuilder.vertex(matrix4f, r, r, 100.0F).uv(0.0F, 0.0F).endVertex();
  428. bufferBuilder.vertex(matrix4f, r, -r, 100.0F).uv(0.0F, 1.0F).endVertex();
  429. bufferBuilder.vertex(matrix4f, -r, -r, 100.0F).uv(1.0F, 1.0F).endVertex();
  430. bufferBuilder.vertex(matrix4f, -r, r, 100.0F).uv(1.0F, 0.0F).endVertex();
  431. BufferUploader.drawWithShader(bufferBuilder.end());
  432. RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
  433. poseStack.popPose();
  434. }
  435.  
  436. @SubscribeEvent
  437. public static void skySetup(FMLClientSetupEvent event) {
  438. try {
  439. Field field = DimensionSpecialEffectsManager.class.getDeclaredField("EFFECTS");
  440. field.setAccessible(true);
  441. for (DimensionSpecialEffects dimensionSpecialEffects : ((com.google.common.collect.ImmutableMap<ResourceLocation, DimensionSpecialEffects>) field.get(null)).values()) {
  442. Class<?> effects = dimensionSpecialEffects.getClass();
  443. ((Set<Predicate<Object[]>>) effects.getField("CUSTOM_SKY").get(null)).add(PREDICATE);
  444. }
  445. } catch (Exception e) {
  446. }
  447. }
  448.  
  449. public static void execute(ResourceKey<Level> dimension) {
  450. execute(null, dimension);
  451. }
  452.  
  453. private static void execute(@Nullable Event event, ResourceKey<Level> dimension) {
  454. if (dimension == null)
  455. return;
  456. if (dimension == ResourceKey.create(Registries.DIMENSION, new ResourceLocation("clrx:desert_sector"))) {
  457. RenderSystem.defaultBlendFunc();
  458. RenderSystem.setShaderTexture(0, new ResourceLocation(("clrx" + ":textures/" + "desert_skybox" + ".png")));
  459. renderSkybox(0, 0, 0, 255 << 24 | 255 << 16 | 255 << 8 | 255, true);
  460. }
  461. }
  462. }
Advertisement
Add Comment
Please, Sign In to add comment