Spaces:
Build error
Build error
package net.minecraft.client.renderer; | |
import com.mojang.blaze3d.vertex.PoseStack; | |
import com.mojang.blaze3d.vertex.VertexConsumer; | |
import com.mojang.math.Axis; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.client.gui.Font; | |
import net.minecraft.client.renderer.state.MapRenderState; | |
import net.minecraft.client.renderer.texture.TextureAtlasSprite; | |
import net.minecraft.client.resources.MapDecorationTextureManager; | |
import net.minecraft.client.resources.MapTextureManager; | |
import net.minecraft.util.Mth; | |
import net.minecraft.world.level.saveddata.maps.MapDecoration; | |
import net.minecraft.world.level.saveddata.maps.MapId; | |
import net.minecraft.world.level.saveddata.maps.MapItemSavedData; | |
import net.minecraftforge.api.distmarker.Dist; | |
import net.minecraftforge.api.distmarker.OnlyIn; | |
import org.joml.Matrix4f; | |
public class MapRenderer { | |
private static final float MAP_Z_OFFSET = -0.01F; | |
private static final float DECORATION_Z_OFFSET = -0.001F; | |
private static final int WIDTH = 128; | |
private static final int HEIGHT = 128; | |
private final MapTextureManager mapTextureManager; | |
private final MapDecorationTextureManager decorationTextures; | |
public MapRenderer(MapDecorationTextureManager p_368155_, MapTextureManager p_364062_) { | |
this.decorationTextures = p_368155_; | |
this.mapTextureManager = p_364062_; | |
} | |
public void render(MapRenderState p_362792_, PoseStack p_362536_, MultiBufferSource p_366211_, boolean p_369246_, int p_369313_) { | |
Matrix4f matrix4f = p_362536_.last().pose(); | |
VertexConsumer vertexconsumer = p_366211_.getBuffer(RenderType.text(p_362792_.texture)); | |
vertexconsumer.addVertex(matrix4f, 0.0F, 128.0F, -0.01F).setColor(-1).setUv(0.0F, 1.0F).setLight(p_369313_); | |
vertexconsumer.addVertex(matrix4f, 128.0F, 128.0F, -0.01F).setColor(-1).setUv(1.0F, 1.0F).setLight(p_369313_); | |
vertexconsumer.addVertex(matrix4f, 128.0F, 0.0F, -0.01F).setColor(-1).setUv(1.0F, 0.0F).setLight(p_369313_); | |
vertexconsumer.addVertex(matrix4f, 0.0F, 0.0F, -0.01F).setColor(-1).setUv(0.0F, 0.0F).setLight(p_369313_); | |
int i = 0; | |
for (MapRenderState.MapDecorationRenderState maprenderstate$mapdecorationrenderstate : p_362792_.decorations) { | |
if (!p_369246_ || maprenderstate$mapdecorationrenderstate.renderOnFrame) { | |
p_362536_.pushPose(); | |
p_362536_.translate( | |
(float)maprenderstate$mapdecorationrenderstate.x / 2.0F + 64.0F, | |
(float)maprenderstate$mapdecorationrenderstate.y / 2.0F + 64.0F, | |
-0.02F | |
); | |
p_362536_.mulPose(Axis.ZP.rotationDegrees((float)(maprenderstate$mapdecorationrenderstate.rot * 360) / 16.0F)); | |
p_362536_.scale(4.0F, 4.0F, 3.0F); | |
p_362536_.translate(-0.125F, 0.125F, 0.0F); | |
Matrix4f matrix4f1 = p_362536_.last().pose(); | |
TextureAtlasSprite textureatlassprite = maprenderstate$mapdecorationrenderstate.atlasSprite; | |
if (textureatlassprite != null) { | |
VertexConsumer vertexconsumer1 = p_366211_.getBuffer(RenderType.text(textureatlassprite.atlasLocation())); | |
vertexconsumer1.addVertex(matrix4f1, -1.0F, 1.0F, (float)i * -0.001F) | |
.setColor(-1) | |
.setUv(textureatlassprite.getU0(), textureatlassprite.getV0()) | |
.setLight(p_369313_); | |
vertexconsumer1.addVertex(matrix4f1, 1.0F, 1.0F, (float)i * -0.001F) | |
.setColor(-1) | |
.setUv(textureatlassprite.getU1(), textureatlassprite.getV0()) | |
.setLight(p_369313_); | |
vertexconsumer1.addVertex(matrix4f1, 1.0F, -1.0F, (float)i * -0.001F) | |
.setColor(-1) | |
.setUv(textureatlassprite.getU1(), textureatlassprite.getV1()) | |
.setLight(p_369313_); | |
vertexconsumer1.addVertex(matrix4f1, -1.0F, -1.0F, (float)i * -0.001F) | |
.setColor(-1) | |
.setUv(textureatlassprite.getU0(), textureatlassprite.getV1()) | |
.setLight(p_369313_); | |
p_362536_.popPose(); | |
} | |
if (maprenderstate$mapdecorationrenderstate.name != null) { | |
Font font = Minecraft.getInstance().font; | |
float f = (float)font.width(maprenderstate$mapdecorationrenderstate.name); | |
float f1 = Mth.clamp(25.0F / f, 0.0F, 6.0F / 9.0F); | |
p_362536_.pushPose(); | |
p_362536_.translate( | |
(float)maprenderstate$mapdecorationrenderstate.x / 2.0F + 64.0F - f * f1 / 2.0F, | |
(float)maprenderstate$mapdecorationrenderstate.y / 2.0F + 64.0F + 4.0F, | |
-0.025F | |
); | |
p_362536_.scale(f1, f1, 1.0F); | |
p_362536_.translate(0.0F, 0.0F, -0.1F); | |
font.drawInBatch( | |
maprenderstate$mapdecorationrenderstate.name, | |
0.0F, | |
0.0F, | |
-1, | |
false, | |
p_362536_.last().pose(), | |
p_366211_, | |
Font.DisplayMode.NORMAL, | |
Integer.MIN_VALUE, | |
p_369313_, | |
false | |
); | |
p_362536_.popPose(); | |
} | |
i++; | |
} | |
} | |
} | |
public void extractRenderState(MapId p_369210_, MapItemSavedData p_363765_, MapRenderState p_362963_) { | |
p_362963_.texture = this.mapTextureManager.prepareMapTexture(p_369210_, p_363765_); | |
p_362963_.decorations.clear(); | |
for (MapDecoration mapdecoration : p_363765_.getDecorations()) { | |
p_362963_.decorations.add(this.extractDecorationRenderState(mapdecoration)); | |
} | |
} | |
private MapRenderState.MapDecorationRenderState extractDecorationRenderState(MapDecoration p_369459_) { | |
MapRenderState.MapDecorationRenderState maprenderstate$mapdecorationrenderstate = new MapRenderState.MapDecorationRenderState(); | |
maprenderstate$mapdecorationrenderstate.atlasSprite = this.decorationTextures.get(p_369459_); | |
maprenderstate$mapdecorationrenderstate.x = p_369459_.x(); | |
maprenderstate$mapdecorationrenderstate.y = p_369459_.y(); | |
maprenderstate$mapdecorationrenderstate.rot = p_369459_.rot(); | |
maprenderstate$mapdecorationrenderstate.name = p_369459_.name().orElse(null); | |
maprenderstate$mapdecorationrenderstate.renderOnFrame = p_369459_.renderOnFrame(); | |
return maprenderstate$mapdecorationrenderstate; | |
} | |
} |