-
Notifications
You must be signed in to change notification settings - Fork 110
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- transparent rendering - custom item model - CTM and tint support - Item models
- Loading branch information
1 parent
cb31ffd
commit ea6cf4a
Showing
24 changed files
with
513 additions
and
84 deletions.
There are no files selected for viewing
6 changes: 4 additions & 2 deletions
6
enderio-conduits/src/generated/resources/assets/enderio/models/item/conduit_facade.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
{ | ||
"loader": "enderio:painted_block", | ||
"reference": "minecraft:stone" | ||
"loader": "enderio:facades_item", | ||
"model": { | ||
"parent": "enderio:block/conduit_facade" | ||
} | ||
} |
6 changes: 4 additions & 2 deletions
6
...-conduits/src/generated/resources/assets/enderio/models/item/hardened_conduit_facade.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
{ | ||
"loader": "enderio:painted_block", | ||
"reference": "minecraft:stone" | ||
"loader": "enderio:facades_item", | ||
"model": { | ||
"parent": "enderio:block/hardened_conduit_facade" | ||
} | ||
} |
6 changes: 4 additions & 2 deletions
6
...nduits/src/generated/resources/assets/enderio/models/item/transparent_conduit_facade.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
{ | ||
"loader": "enderio:painted_block", | ||
"reference": "minecraft:stone" | ||
"loader": "enderio:facades_item", | ||
"model": { | ||
"parent": "enderio:block/transparent_conduit_facade" | ||
} | ||
} |
6 changes: 4 additions & 2 deletions
6
...c/generated/resources/assets/enderio/models/item/transparent_hardened_conduit_facade.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
{ | ||
"loader": "enderio:painted_block", | ||
"reference": "minecraft:stone" | ||
"loader": "enderio:facades_item", | ||
"model": { | ||
"parent": "enderio:block/transparent_hardened_conduit_facade" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
enderio-conduits/src/main/java/com/enderio/conduits/client/ConduitFacadeColor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package com.enderio.conduits.client; | ||
|
||
import com.enderio.base.common.init.EIODataComponents; | ||
import com.enderio.conduits.client.model.conduit.facades.FacadeHelper; | ||
import com.enderio.conduits.common.conduit.block.ConduitBundleBlockEntity; | ||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.client.color.block.BlockColor; | ||
import net.minecraft.client.color.item.ItemColor; | ||
import net.minecraft.core.BlockPos; | ||
import net.minecraft.world.item.DyeColor; | ||
import net.minecraft.world.item.ItemStack; | ||
import net.minecraft.world.level.BlockAndTintGetter; | ||
import net.minecraft.world.level.block.Block; | ||
import net.minecraft.world.level.block.entity.BlockEntity; | ||
import net.minecraft.world.level.block.state.BlockState; | ||
import org.jetbrains.annotations.Nullable; | ||
|
||
import java.util.Optional; | ||
|
||
public class ConduitFacadeColor implements BlockColor, ItemColor { | ||
@Override | ||
public int getColor(BlockState state, @Nullable BlockAndTintGetter level, @Nullable BlockPos pos, int tintIndex) { | ||
if (tintIndex >= 0) { | ||
return DyeColor.values()[tintIndex].getTextureDiffuseColor(); | ||
} | ||
tintIndex = unmoveTintIndex(tintIndex); | ||
if (level != null && pos != null) { | ||
BlockEntity entity = level.getBlockEntity(pos); | ||
if (entity instanceof ConduitBundleBlockEntity conduitBundleBlock) { | ||
|
||
Optional<Block> facade = conduitBundleBlock.getBundle().facade(); | ||
|
||
if (facade.isPresent() && FacadeHelper.areFacadesVisible()) { | ||
int color = Minecraft.getInstance().getBlockColors().getColor(facade.get().defaultBlockState(), level, pos, tintIndex); | ||
if (color != -1) { | ||
return color; | ||
} | ||
} | ||
} | ||
} | ||
|
||
return 0xFFFFFF; | ||
} | ||
|
||
@Override | ||
public int getColor(ItemStack stack, int tintIndex) { | ||
var facadeData = stack.get(EIODataComponents.BLOCK_PAINT); | ||
if (facadeData != null) { | ||
var block = facadeData.paint(); | ||
return Minecraft.getInstance().getItemColors().getColor(block.asItem().getDefaultInstance(), tintIndex); | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
public static int moveTintIndex(int original) { | ||
return -original - 2; | ||
} | ||
|
||
public static int unmoveTintIndex(int original) { | ||
if (original > 0) { | ||
return original; | ||
} else { | ||
return -original - 2; | ||
} | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
enderio-conduits/src/main/java/com/enderio/conduits/client/ConduitFacadeRendering.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package com.enderio.conduits.client; | ||
|
||
import com.enderio.conduits.client.model.conduit.facades.FacadeHelper; | ||
import com.enderio.conduits.common.conduit.block.ConduitBundleBlock; | ||
import com.enderio.conduits.common.conduit.block.ConduitBundleBlockEntity; | ||
import com.mojang.blaze3d.vertex.VertexConsumer; | ||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.client.multiplayer.ClientLevel; | ||
import net.minecraft.client.renderer.LightTexture; | ||
import net.minecraft.client.renderer.Sheets; | ||
import net.minecraft.client.renderer.texture.OverlayTexture; | ||
import net.minecraft.core.BlockPos; | ||
import net.minecraft.util.FastColor; | ||
import net.minecraft.util.RandomSource; | ||
import net.minecraft.world.level.LightLayer; | ||
import net.minecraft.world.level.block.state.BlockState; | ||
import net.neoforged.api.distmarker.Dist; | ||
import net.neoforged.bus.api.SubscribeEvent; | ||
import net.neoforged.fml.common.EventBusSubscriber; | ||
import net.neoforged.neoforge.client.event.RenderLevelStageEvent; | ||
import net.neoforged.neoforge.client.model.data.ModelData; | ||
import net.neoforged.neoforge.client.model.pipeline.VertexConsumerWrapper; | ||
|
||
import java.util.Map; | ||
|
||
@EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) | ||
public class ConduitFacadeRendering { | ||
|
||
@SubscribeEvent | ||
static void renderFacade(RenderLevelStageEvent event) { | ||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_TRIPWIRE_BLOCKS || FacadeHelper.areFacadesVisible()) { | ||
return; | ||
} | ||
for (Map.Entry<BlockPos, BlockState> entry : ConduitBundleBlockEntity.FACADES.entrySet()) { | ||
ClientLevel level = Minecraft.getInstance().level; | ||
if (!level.isLoaded(entry.getKey())) { | ||
return; | ||
} | ||
if (level.getBlockState(entry.getKey()).getBlock() instanceof ConduitBundleBlock) { | ||
if (entry.getValue() == null) { | ||
continue; | ||
} | ||
|
||
var baseConsumer = Minecraft.getInstance().renderBuffers().bufferSource().getBuffer(Sheets.translucentCullBlockSheet()); | ||
var wrappedConsumer = new VertexConsumerWrapper(baseConsumer) { | ||
@Override | ||
public VertexConsumer setColor(int r, int g, int b, int a) { | ||
super.setColor(r, g, b, 85); | ||
return this; | ||
} | ||
}; | ||
|
||
var cameraPos = event.getCamera().getPosition(); | ||
event.getPoseStack().pushPose(); | ||
event.getPoseStack().translate(entry.getKey().getX()-cameraPos.x, entry.getKey().getY()-cameraPos.y, entry.getKey().getZ()-cameraPos.z); | ||
|
||
var model = Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(entry.getValue()); | ||
int color = Minecraft.getInstance().getBlockColors().getColor(entry.getValue(), level, entry.getKey()); | ||
for (var renderType : model.getRenderTypes(entry.getValue(), RandomSource.create(), ModelData.EMPTY)) { | ||
Minecraft.getInstance().getBlockRenderer().getModelRenderer().renderModel(event.getPoseStack().last(), wrappedConsumer, entry.getValue(), | ||
model, FastColor.ARGB32.red(color) / 255.0F, FastColor.ARGB32.green(color) / 255.0F, FastColor.ARGB32.blue(color) / 255.0F, | ||
LightTexture.pack(level.getBrightness(LightLayer.BLOCK, entry.getKey()), level.getBrightness(LightLayer.SKY, entry.getKey())), | ||
OverlayTexture.NO_OVERLAY, model.getModelData(level, entry.getKey(), entry.getValue(), ModelData.EMPTY), renderType | ||
); | ||
} | ||
Minecraft.getInstance().renderBuffers().bufferSource().endBatch(Sheets.translucentCullBlockSheet()); | ||
event.getPoseStack().popPose(); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.