More fullbright stuff
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user