Skip to content

Commit

Permalink
Add base core render, Fix alpha not working on item render
Browse files Browse the repository at this point in the history
  • Loading branch information
IONayrus committed Jan 24, 2025
1 parent 6a690b0 commit 021438c
Show file tree
Hide file tree
Showing 8 changed files with 117 additions and 51 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ mod_name=Note Block Master
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=GNU GPLv3
# The mod version. See https://semver.org/
mod_version=0.7.4
mod_version=0.7.5
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ protected void registerModels() {
handheldItem(Registry.NOTETUNER);

basicItem(Registry.COMPOSER.get());
basicItem(Registry.CORE.get());

customRendered(Registry.SUSTAIN);
customRendered(Registry.VOLUME);
customRendered(Registry.CORE);
}

private void handheldItem(DeferredItem<?> item) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.nayrus.noteblockmaster.item;

import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
Expand All @@ -12,15 +11,12 @@
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.nayrus.noteblockmaster.block.TuningCore;
import net.nayrus.noteblockmaster.render.item.BaseItemRender;
import net.nayrus.noteblockmaster.render.item.SpinningCoreRender;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;

public class AnimatedCore extends Item {
public class SpinningCore extends Item {

public AnimatedCore() {
public SpinningCore() {
super(new Item.Properties());
}

Expand Down Expand Up @@ -66,14 +62,4 @@ public InteractionResult addCoreToTuningCore(Level level, Player player, BlockPo
level.playSound(null, pos, TuningCore.CORE_SOUNDS.getPlaceSound(), SoundSource.BLOCKS);
return Utils.swingHelper(player, hand, false);
}

public static class Renderer implements IClientItemExtensions{

private final BaseItemRender baseItemRender = new SpinningCoreRender();

@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return baseItemRender;
}
}
}
17 changes: 2 additions & 15 deletions src/main/java/net/nayrus/noteblockmaster/render/NBMRenderType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType;

public class NBMRenderType extends RenderType {
Expand All @@ -25,27 +24,15 @@ public NBMRenderType(String name, VertexFormat format, VertexFormat.Mode mode, i
.createCompositeState(false));

public static final RenderType TRANSLUCENT_QUADS = create("NBMTQuads",
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS, 256, false, false,
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS, 256, false, true,
RenderType.CompositeState.builder()
.setShaderState(ShaderStateShard.POSITION_COLOR_SHADER)
.setLayeringState(VIEW_OFFSET_Z_LAYERING)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setTextureState(NO_TEXTURE)
.setCullState(NO_CULL)
.setLightmapState(NO_LIGHTMAP)
.setWriteMaskState(COLOR_WRITE)
.createCompositeState(false));

public static final RenderType QUADS = create("NBMQuads",
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS, 256, false, false,
RenderType.CompositeState.builder()
.setShaderState(ShaderStateShard.POSITION_COLOR_SHADER)
.setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setDepthTestState(RenderStateShard.LEQUAL_DEPTH_TEST)
.setTextureState(NO_TEXTURE)
.setCullState(NO_CULL)
.setLightmapState(NO_LIGHTMAP)
.setWriteMaskState(COLOR_DEPTH_WRITE)
.createCompositeState(false));

}
13 changes: 13 additions & 0 deletions src/main/java/net/nayrus/noteblockmaster/render/RenderUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.nayrus.noteblockmaster.utils.Utils;
Expand Down Expand Up @@ -71,6 +73,11 @@ public static void buildHalfTorus(Matrix4f matrix, VertexConsumer builder, Color
}
}

public static void buildTorus(Matrix4f matrix, VertexConsumer builder, Color color, float scale, float radius, float innerRadius, float alpha) {
buildHalfTorus(matrix, builder, color, scale, radius, innerRadius,0, alpha);
buildHalfTorus(matrix, builder, color, scale, radius, innerRadius, Utils.PI, alpha);
}

public static Color shiftColor(Color base, Color target, float factor) {
factor = Math.min(1, Math.max(-1, factor));
if(factor >= 0)
Expand Down Expand Up @@ -120,4 +127,10 @@ public static void pushAndTranslateRelativeToCam(PoseStack stack){
stack.translate(-CURRENT_CAM_POS.x(), -CURRENT_CAM_POS.y(), -CURRENT_CAM_POS.z());
}

public static int getPackedLight(Level level, BlockPos pos) {
int blockLight = level.getBrightness(LightLayer.BLOCK, pos);
int skyLight = level.getBrightness(LightLayer.SKY, pos);
return (skyLight << 4) | blockLight;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package net.nayrus.noteblockmaster.render.item;

import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.nayrus.noteblockmaster.render.NBMRenderType;
import net.nayrus.noteblockmaster.render.RenderUtils;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;

import java.awt.*;

public class CoreBaseRender extends BaseItemRender {

@Override
public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
super.renderByItem(stack, displayContext, matrix, buffer, packedLight, packedOverlay);
}

@Override
public void renderItemInGUI(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
renderBaseRings(matrix, buffer, 0.5F, 0.7F, packedLight);
}

@Override
public void renderItemOnGround(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
renderBaseRings(matrix, buffer, 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemFirstPerson(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay, InteractionHand hand) {
matrix.translate(0.0,0,-0.2);
renderBaseRings(matrix, buffer, 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemThirdPerson(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay, InteractionHand hand) {
matrix.translate(0.0,0,-0.25);
renderBaseRings(matrix, buffer, 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemInFrame(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
renderBaseRings(matrix, buffer, 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemOnHead(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
renderBaseRings(matrix, buffer, 0.5F, 0.7F, packedLight);
}

public static void renderBaseRings(PoseStack matrix, MultiBufferSource buffer, float scale, float alpha, int packedLight){
matrix.pushPose();
RenderUtils.buildTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.TRANSLUCENT_QUADS), new Color(52,153,136), scale, 0.5F, 0.03F, alpha);
RenderUtils.buildTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.TRANSLUCENT_QUADS), Color.LIGHT_GRAY, scale, 0.6F, 0.07F, alpha);
RenderUtils.buildTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.TRANSLUCENT_QUADS), Color.ORANGE, scale, 0.7F, 0.03F, alpha);
matrix.popPose();
}

public static class Extension implements IClientItemExtensions {

private final BaseItemRender baseItemRender = new CoreBaseRender();

@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return baseItemRender;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,43 +1,41 @@
package net.nayrus.noteblockmaster.render.item;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.minecraft.Util;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack;
import net.nayrus.noteblockmaster.render.NBMRenderType;
import net.nayrus.noteblockmaster.render.RenderUtils;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;

import java.awt.*;

public class SpinningCoreRender extends BaseItemRender{

@Override
public void renderItemInGUI(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.5F, 0.7F);
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.5F, 0.7F, packedLight);
}

@Override
public void renderItemOnGround(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {
RenderSystem.enableDepthTest();
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F);
RenderSystem.disableDepthTest();
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemFirstPerson(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay, InteractionHand hand) {
matrix.translate(0.0,0,-0.2);
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F);
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F, packedLight);
}

@Override
public void renderItemThirdPerson(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay, InteractionHand hand) {
matrix.translate(0.0,0,-0.25);
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F);
renderRotatingRings(matrix, buffer, getBaseColor(stack), 0.33F, 0.7F, packedLight);
}

@Override
Expand All @@ -47,26 +45,34 @@ public void renderItemInFrame(ItemStack stack, PoseStack matrix, MultiBufferSour

@Override
public void renderItemOnHead(ItemStack stack, PoseStack matrix, MultiBufferSource buffer, int packedLight, int packedOverlay) {

renderItemInGUI(stack, matrix, buffer, packedLight, packedOverlay);
}

public void renderRotatingRings(PoseStack matrix, MultiBufferSource buffer, Color baseColor, float scale, float alpha){
public void renderRotatingRings(PoseStack matrix, MultiBufferSource buffer, Color baseColor, float scale, float alpha, int packedLight){
matrix.pushPose();
matrix.rotateAround(Axis.YP.rotation(Util.getMillis()/1500F),0.5F,0F,-0.5F);
matrix.rotateAround(Axis.XP.rotation(Util.getMillis()/700F),0F,0.5F,-0.5F);
RenderUtils.buildHalfTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.QUADS), baseColor, scale, 0.7F, 0.08F, 0F, 1);
RenderUtils.buildHalfTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.QUADS), baseColor, scale, 0.7F, 0.08F, Utils.PI, 1);
RenderUtils.buildTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.TRANSLUCENT_QUADS), baseColor, scale, 0.7F, 0.08F, alpha);
matrix.popPose();
matrix.pushPose();
matrix.rotateAround(Axis.XP.rotation(Util.getMillis()/8000F),0F,0.5F,-0.5F);
//matrix.rotateAround(Axis.YP.rotation(Util.getMillis()/8000F),0.5F,0F,-0.5F);
matrix.rotateAround(Axis.ZP.rotation(Util.getMillis()/300F),0.5F,0.5F,0F);
RenderUtils.buildHalfTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.QUADS), baseColor, scale, 0.5F, 0.08F, 0F, 1);
RenderUtils.buildHalfTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.QUADS), baseColor, scale, 0.5F, 0.08F, Utils.PI, 1);
RenderUtils.buildTorus(matrix.last().pose(), buffer.getBuffer(NBMRenderType.TRANSLUCENT_QUADS), baseColor, scale, 0.5F, 0.08F, alpha);
matrix.popPose();
}

public Color getBaseColor(ItemStack stack){
return stack.is(Registry.SUSTAIN) ? RenderUtils.shiftColor(Color.BLUE, Color.GRAY, 0.1F) : RenderUtils.shiftColor(Color.WHITE,Color.BLACK,0.1F);
}

public static class Extension implements IClientItemExtensions {

private final BaseItemRender baseItemRender = new SpinningCoreRender();

@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return baseItemRender;
}
}
}
11 changes: 7 additions & 4 deletions src/main/java/net/nayrus/noteblockmaster/setup/Registry.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.nayrus.noteblockmaster.block.AdvancedNoteBlock;
import net.nayrus.noteblockmaster.block.TuningCore;
import net.nayrus.noteblockmaster.item.AnimatedCore;
import net.nayrus.noteblockmaster.item.SpinningCore;
import net.nayrus.noteblockmaster.item.ComposersNote;
import net.nayrus.noteblockmaster.item.TunerItem;
import net.nayrus.noteblockmaster.network.data.ComposeData;
import net.nayrus.noteblockmaster.network.data.TunerData;
import net.nayrus.noteblockmaster.render.item.CoreBaseRender;
import net.nayrus.noteblockmaster.render.item.SpinningCoreRender;
import net.nayrus.noteblockmaster.render.particle.SustainedNoteParticle;
import net.nayrus.noteblockmaster.render.particle.SustainedNoteType;
import net.neoforged.bus.api.IEventBus;
Expand Down Expand Up @@ -50,8 +52,8 @@ public class Registry
public static final DeferredItem<Item> NOTETUNER = ITEMS.register("notetuner", TunerItem::new);
public static final DeferredItem<Item> COMPOSER = ITEMS.register("composer", ComposersNote::new);
public static final DeferredItem<Item> CORE = ITEMS.register("core", () -> new Item(new Item.Properties()));
public static final DeferredItem<Item> SUSTAIN = ITEMS.register("sustain", AnimatedCore::new);
public static final DeferredItem<Item> VOLUME = ITEMS.register("volume", AnimatedCore::new);
public static final DeferredItem<Item> SUSTAIN = ITEMS.register("sustain", SpinningCore::new);
public static final DeferredItem<Item> VOLUME = ITEMS.register("volume", SpinningCore::new);

public static final DeferredHolder<DataComponentType<?>, DataComponentType<TunerData>> TUNER_DATA = DATA_COMPONENT_TYPES.registerComponentType("tuner_data",
builder -> builder.persistent(TunerData.TUNER_CODEC));
Expand Down Expand Up @@ -82,7 +84,8 @@ public static void register(IEventBus eventBus) {
}

public static void registerClientExtensions(RegisterClientExtensionsEvent event) {
event.registerItem(new AnimatedCore.Renderer(), VOLUME, SUSTAIN);
event.registerItem(new SpinningCoreRender.Extension(), VOLUME, SUSTAIN);
event.registerItem(new CoreBaseRender.Extension(), CORE);
}

public static void registerParticles(RegisterParticleProvidersEvent event) {
Expand Down

0 comments on commit 021438c

Please sign in to comment.