MapTextureManager.java
net.minecraft.client.resources.MapTextureManager
信息
- 全限定名:net.minecraft.client.resources.MapTextureManager
- 类型:public class
- 包:net.minecraft.client.resources
- 源码路径:src/main/java/net/minecraft/client/resources/MapTextureManager.java
- 起始行号:L17
- 实现:AutoCloseable
- 职责:
TODO
字段/常量
-
maps- 类型:
Int2ObjectMap<MapTextureManager.MapInstance> - 修饰符:
private final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
textureManager- 类型:
TextureManager - 修饰符:
private final - 源码定位:
L19 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.resources.MapTextureManager.MapInstance- 类型:
class - 修饰符:
private - 源码定位:
L60 - 说明:
TODO
- 类型:
构造器
public MapTextureManager(TextureManager textureManager) @ L21
- 构造器名:MapTextureManager
- 源码定位:L21
- 修饰符:public
参数:
- textureManager: TextureManager
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void update(MapId id, MapItemSavedData data) @ L25
- 方法名:update
- 源码定位:L25
- 返回类型:void
- 修饰符:public
参数:
- id: MapId
- data: MapItemSavedData
说明:
TODO
public Identifier prepareMapTexture(MapId id, MapItemSavedData data) @ L29
- 方法名:prepareMapTexture
- 源码定位:L29
- 返回类型:Identifier
- 修饰符:public
参数:
- id: MapId
- data: MapItemSavedData
说明:
TODO
public void resetData() @ L35
- 方法名:resetData
- 源码定位:L35
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private MapTextureManager.MapInstance getOrCreateMapInstance(MapId id, MapItemSavedData data) @ L43
- 方法名:getOrCreateMapInstance
- 源码定位:L43
- 返回类型:MapTextureManager.MapInstance
- 修饰符:private
参数:
- id: MapId
- data: MapItemSavedData
说明:
TODO
public void close() @ L54
- 方法名:close
- 源码定位:L54
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class MapTextureManager implements AutoCloseable {
private final Int2ObjectMap<MapTextureManager.MapInstance> maps = new Int2ObjectOpenHashMap<>();
private final TextureManager textureManager;
public MapTextureManager(TextureManager textureManager) {
this.textureManager = textureManager;
}
public void update(MapId id, MapItemSavedData data) {
this.getOrCreateMapInstance(id, data).forceUpload();
}
public Identifier prepareMapTexture(MapId id, MapItemSavedData data) {
MapTextureManager.MapInstance mapInstance = this.getOrCreateMapInstance(id, data);
mapInstance.updateTextureIfNeeded();
return mapInstance.location;
}
public void resetData() {
for (MapTextureManager.MapInstance mapInstance : this.maps.values()) {
mapInstance.close();
}
this.maps.clear();
}
private MapTextureManager.MapInstance getOrCreateMapInstance(MapId id, MapItemSavedData data) {
return this.maps.compute(id.id(), (k, instance) -> {
if (instance == null) {
return new MapTextureManager.MapInstance(k, data);
} else {
instance.replaceMapData(data);
return (MapTextureManager.MapInstance)instance;
}
});
}
@Override
public void close() {
this.resetData();
}
@OnlyIn(Dist.CLIENT)
private class MapInstance implements AutoCloseable {
private MapItemSavedData data;
private final DynamicTexture texture;
private boolean requiresUpload;
private final Identifier location;
private MapInstance(int id, MapItemSavedData data) {
Objects.requireNonNull(MapTextureManager.this);
super();
this.requiresUpload = true;
this.data = data;
this.texture = new DynamicTexture(() -> "Map " + id, 128, 128, true);
this.location = Identifier.withDefaultNamespace("map/" + id);
MapTextureManager.this.textureManager.register(this.location, this.texture);
}
private void replaceMapData(MapItemSavedData data) {
boolean dataChanged = this.data != data;
this.data = data;
this.requiresUpload |= dataChanged;
}
public void forceUpload() {
this.requiresUpload = true;
}
private void updateTextureIfNeeded() {
if (this.requiresUpload) {
NativeImage pixels = this.texture.getPixels();
for (int y = 0; y < 128; y++) {
for (int x = 0; x < 128; x++) {
int i = x + y * 128;
pixels.setPixel(x, y, MapColor.getColorFromPackedId(this.data.colors[i]));
}
}
this.texture.upload();
this.requiresUpload = false;
}
}
@Override
public void close() {
this.texture.close();
}
}
}引用的其他类
-
- 引用位置:
构造调用 - 关联成员:
DynamicTexture()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用/返回值 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
MapColor.getColorFromPackedId()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: