More fullbright stuff

This commit is contained in:
raoulvdberge
2020-01-13 23:11:36 +01:00
parent 3a1472faca
commit c2c92f7b1e
3 changed files with 41 additions and 87 deletions

View File

@@ -3,17 +3,13 @@ package com.raoulvdberge.refinedstorage.render.model;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.raoulvdberge.refinedstorage.util.RenderUtils;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.pipeline.BakedQuadBuilder;
import net.minecraftforge.client.model.pipeline.VertexLighterFlat;
import javax.annotation.Nullable;
import java.util.*;
@@ -26,28 +22,28 @@ public class FullbrightBakedModel extends DelegateBakedModel {
}
});
private Set<ResourceLocation> textures;
private boolean cacheDisabled = false;
private final Set<ResourceLocation> textures;
private final boolean doCaching;
public FullbrightBakedModel(IBakedModel base, ResourceLocation... textures) {
public FullbrightBakedModel(IBakedModel base, boolean doCaching, ResourceLocation... textures) {
super(base);
this.textures = new HashSet<>(Arrays.asList(textures));
this.doCaching = doCaching;
}
public FullbrightBakedModel disableCache() {
this.cacheDisabled = true;
return this;
private boolean canRenderFullbright() {
// return ForgeConfig.CLIENT.forgeLightPipelineEnabled.get();
return true;
}
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) {
if (state == null) {
if (state == null || !canRenderFullbright()) {
return base.getQuads(state, side, rand, data);
}
if (cacheDisabled) {
if (!doCaching) {
return transformQuads(base.getQuads(state, side, rand, data), textures);
}
@@ -61,44 +57,21 @@ public class FullbrightBakedModel extends DelegateBakedModel {
BakedQuad quad = quads.get(i);
if (textures.contains(quad.getSprite().getName())) {
quads.set(i, transformQuad(quad, 0.007F));
quads.set(i, transformQuad(quad));
}
}
return quads;
}
private static BakedQuad transformQuad(BakedQuad quad, float light) {
if (RenderUtils.isLightMapDisabled()) {
private static BakedQuad transformQuad(BakedQuad quad) {
int[] vertexData = quad.getVertexData();
vertexData[6] = 0xF000F000;
return quad;
}
BakedQuadBuilder builder = new BakedQuadBuilder(quad.getSprite());
VertexLighterFlat trans = new VertexLighterFlat(Minecraft.getInstance().getBlockColors()) {
@Override
protected void updateLightmap(float[] normal, float[] lightmap, float x, float y, float z) {
lightmap[0] = light;
lightmap[1] = light;
}
@Override
public void setQuadTint(int tint) {
// NO OP
}
};
trans.setParent(builder);
builder.setQuadOrientation(quad.getFace());
builder.setTexture(quad.getSprite());
builder.setApplyDiffuseLighting(false);
quad.pipe(trans);
return builder.build();
}
private class CacheKey {
private IBakedModel base;
private Set<ResourceLocation> textures;

View File

@@ -43,35 +43,38 @@ public class ClientSetup {
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "controller"), (base, registry) -> new FullbrightBakedModel(
base,
true,
new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_off"),
new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_on"),
new ResourceLocation(RS.ID, "block/controller/cutouts/on")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "creative_controller"), (base, registry) -> new FullbrightBakedModel(
base,
true,
new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_off"),
new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_on"),
new ResourceLocation(RS.ID, "block/controller/cutouts/on")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "grid"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/grid/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafting_grid"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/grid/cutouts/crafting_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern_grid"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/grid/cutouts/pattern_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "fluid_grid"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/grid/cutouts/fluid_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "network_receiver"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/network_receiver/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "network_transmitter"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/network_transmitter/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "relay"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/relay/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "detector"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/detector/cutouts/on")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "grid"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/grid/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafting_grid"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/grid/cutouts/crafting_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern_grid"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/grid/cutouts/pattern_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "fluid_grid"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/grid/cutouts/fluid_front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "network_receiver"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/network_receiver/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "network_transmitter"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/network_transmitter/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "relay"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/relay/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "detector"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/detector/cutouts/on")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "security_manager"), (base, registry) -> new FullbrightBakedModel(
base,
true,
new ResourceLocation(RS.ID, "block/security_manager/cutouts/top_connected"),
new ResourceLocation(RS.ID, "block/security_manager/cutouts/front_connected"),
new ResourceLocation(RS.ID, "block/security_manager/cutouts/left_connected"),
new ResourceLocation(RS.ID, "block/security_manager/cutouts/back_connected"),
new ResourceLocation(RS.ID, "block/security_manager/cutouts/right_connected")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "wireless_transmitter"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/wireless_transmitter/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "constructor"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/constructor/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "destructor"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/destructor/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "wireless_transmitter"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/wireless_transmitter/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "constructor"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/constructor/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "destructor"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/destructor/cutouts/connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel(
new DiskDriveBakedModel(
@@ -80,8 +83,10 @@ public class ClientSetup {
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_near_capacity")),
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_full")),
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_disconnected"))
)
).disableCache());
),
false,
new ResourceLocation(RS.ID, "block/disks/leds")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_manipulator"), (base, registry) -> new FullbrightBakedModel(
new DiskManipulatorBakedModel(
@@ -92,9 +97,10 @@ public class ClientSetup {
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_full")),
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_disconnected"))
),
false,
new ResourceLocation(RS.ID, "block/disk_manipulator/cutouts/connected"),
new ResourceLocation(RS.ID, "block/disks/leds")
).disableCache());
));
for (String portableGridName : new String[]{"portable_grid", "creative_portable_grid"}) {
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, portableGridName), (base, registry) -> new FullbrightBakedModel(
@@ -106,12 +112,14 @@ public class ClientSetup {
registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")),
registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected"))
),
false,
new ResourceLocation(RS.ID + ":block/disks/leds")
).disableCache());
));
}
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter"), (base, registry) -> new FullbrightBakedModel(
base,
true,
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_90"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_180"),
@@ -119,8 +127,8 @@ public class ClientSetup {
new ResourceLocation(RS.ID, "block/crafter/cutouts/front_connected")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter_manager"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafter_manager/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafting_monitor"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafting_monitor/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter_manager"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/crafter_manager/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafting_monitor"), (base, registry) -> new FullbrightBakedModel(base, true, new ResourceLocation(RS.ID, "block/crafting_monitor/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
@@ -143,6 +151,7 @@ public class ClientSetup {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown());
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getInstance().player.openContainer;
@@ -156,6 +165,7 @@ public class ClientSetup {
return false;
});
API.instance().addPatternRenderHandler(pattern -> {
Container container = Minecraft.getInstance().player.openContainer;

View File

@@ -30,8 +30,6 @@ import java.util.List;
import java.util.Set;
public final class RenderUtils {
private static final VertexFormat ITEM_FORMAT_WITH_LIGHTMAP = addTex2sToVertexFormat(DefaultVertexFormats.field_227849_i_); // TODO Is this item?
public static String shorten(String text, int length) {
if (text.length() > length) {
text = text.substring(0, length) + "...";
@@ -243,33 +241,6 @@ public final class RenderUtils {
return tooltipStrings;
}
public static boolean isLightMapDisabled() {
// return ForgeConfig.CLIENT.forgeLightPipelineEnabled.get();
return false;
}
public static VertexFormat getFormatWithLightMap(VertexFormat format) {
if (isLightMapDisabled()) {
return format;
}
if (format == DefaultVertexFormats.BLOCK) {
return DefaultVertexFormats.BLOCK;
} else if (format == DefaultVertexFormats.field_227849_i_) { // TODO Is this item?
return ITEM_FORMAT_WITH_LIGHTMAP;
} else if (!format.hasUV(1)) {
return addTex2sToVertexFormat(format);
}
return format;
}
private static VertexFormat addTex2sToVertexFormat(VertexFormat format) {
List<VertexFormatElement> elems = new ArrayList<>(format.func_227894_c_());
elems.add(DefaultVertexFormats.TEX_2S);
return new VertexFormat(ImmutableList.copyOf(elems));
}
public static boolean inBounds(int x, int y, int w, int h, double ox, double oy) {
return ox >= x && ox <= x + w && oy >= y && oy <= y + h;
}