Skip to content

Commit

Permalink
wip balloon
Browse files Browse the repository at this point in the history
  • Loading branch information
LeoLezury committed Aug 31, 2024
1 parent 8004c53 commit 993ab42
Show file tree
Hide file tree
Showing 43 changed files with 801 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// 1.21 2024-07-26T11:42:10.7600866 Item Models: celebrations
// 1.21 2024-08-31T20:50:35.7179308 Item Models: celebrations
8efe7fdaedc19c87bd5600b7ed21cb12f5d57eff assets/celebrations/models/item/balloon.json
4a0465436abc24d1696617288f0597d06b41a9d7 assets/celebrations/models/item/chinese_styled_bamboo_lantern.json
456fb978cf2a416a9cfad9e18fbde0ee711352c4 assets/celebrations/models/item/chinese_styled_paper_lantern.json
d716b049310b4b1e98454511dfd779b66711ea88 assets/celebrations/models/item/chinese_styled_red_lantern.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.21 2024-07-28T12:41:42.2679323 Languages: zh_cn for mod: celebrations
41a69f30d929b996cf86dac65b1e01f6796b4830 assets/celebrations/lang/zh_cn.json
// 1.21 2024-08-31T20:50:35.7179308 Languages: zh_cn for mod: celebrations
3ccff4f74ebb1700a8e119a2e5bbd87eaa20a7fb assets/celebrations/lang/zh_cn.json
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.21 2024-07-28T12:41:42.2689501 Languages: en_us for mod: celebrations
def096f772a649bde461c0ea664485395b5c3d3e assets/celebrations/lang/en_us.json
// 1.21 2024-08-31T20:50:35.7179308 Languages: en_us for mod: celebrations
43f1aa404e8ae53e01195d659f596b2e9f695869 assets/celebrations/lang/en_us.json
2 changes: 2 additions & 0 deletions src/generated/resources/assets/celebrations/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
"celebrations.configuration.lanternGiveEnemyHarmfulEffect": "Lanterns Give Enemies Harmful Effects",
"celebrations.configuration.lanternGiveNonEnemyBeneficialEffect": "Lanterns Give Non-enemy Mobs Beneficial Effects",
"celebrations.configuration.lanternGiveNonEnemyHarmfulEffect": "Lanterns Give Non-enemy Mobs Harmful Effects",
"entity.celebrations.balloon": "Balloon",
"fml.menu.mods.info.description.celebrations": "A mod about celebrating!",
"item.celebrations.balloon": "Balloon",
"item.celebrations.gold_powder": "Gold Powder",
"item.celebrations.party_hat": "Party Hat",
"item.celebrations.red_paper": "Red Paper",
Expand Down
2 changes: 2 additions & 0 deletions src/generated/resources/assets/celebrations/lang/zh_cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
"celebrations.configuration.lanternGiveEnemyHarmfulEffect": "灯笼给予敌对生物负面效果",
"celebrations.configuration.lanternGiveNonEnemyBeneficialEffect": "灯笼给予非敌对生物增益效果",
"celebrations.configuration.lanternGiveNonEnemyHarmfulEffect": "灯笼给予非敌对生物负面效果",
"entity.celebrations.balloon": "气球",
"fml.menu.mods.info.description.celebrations": "一个关于庆祝的模组!",
"item.celebrations.balloon": "气球",
"item.celebrations.gold_powder": "金粉",
"item.celebrations.party_hat": "派对帽",
"item.celebrations.red_paper": "红纸",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "celebrations:item/balloon_leash",
"layer1": "celebrations:item/balloon"
}
}
1 change: 1 addition & 0 deletions src/main/java/team/leomc/celebrations/Celebrations.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public Celebrations(IEventBus modBus, ModContainer container) {
CDataComponents.DATA_COMPONENTS.register(modBus);
CItems.ITEMS.register(modBus);
CCreativeModeTabs.TABS.register(modBus);
CEntities.ENTITY_TYPES.register(modBus);
CRecipeSerializers.RECIPE_SERIALIZERS.register(modBus);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,12 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev
}
if (stack.has(DataComponents.POTION_CONTENTS) && level.getBlockEntity(pos) instanceof LanternBlockEntity lanternBlockEntity) {
PotionContents potions = stack.get(DataComponents.POTION_CONTENTS);
if (potions != null && potions.potion().isPresent()) {
if (potions != null && potions.potion().isPresent() && stack.is(Items.POTION)) {
Potion potion = potions.potion().get().value();
if (potion.equals(Potions.WATER)) {
if (potion == Potions.WATER.value()) {
lanternBlockEntity.clearEffects();
level.setBlockAndUpdate(pos, state.setValue(LIT, false));
if (!player.getAbilities().instabuild) {
if (!player.hasInfiniteMaterials()) {
player.setItemInHand(hand, Items.GLASS_BOTTLE.getDefaultInstance());
}
return ItemInteractionResult.sidedSuccess(level.isClientSide);
Expand All @@ -166,7 +166,7 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev
for (MobEffectInstance instance : potions.getAllEffects()) {
if (!instance.getEffect().value().isInstantenous()) {
lanternBlockEntity.addEffect(new MobEffectInstance(instance));
if (!player.getAbilities().instabuild) {
if (!player.hasInfiniteMaterials()) {
player.setItemInHand(hand, Items.GLASS_BOTTLE.getDefaultInstance());
}
succeed = true;
Expand Down
121 changes: 121 additions & 0 deletions src/main/java/team/leomc/celebrations/client/event/CClientEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package team.leomc.celebrations.client.event;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
import org.joml.Matrix4f;
import team.leomc.celebrations.Celebrations;
import team.leomc.celebrations.entity.Balloon;

@OnlyIn(Dist.CLIENT)
@EventBusSubscriber(modid = Celebrations.ID, value = Dist.CLIENT)
public class CClientEvents {
public static final int FULL_BRIGHT = 0xf000f0;
public static final Int2ObjectArrayMap<Vec3> PLAYER_LEFT_HAND_POS = new Int2ObjectArrayMap<>();
public static final Int2ObjectArrayMap<Vec3> PLAYER_RIGHT_HAND_POS = new Int2ObjectArrayMap<>();
public static final Int2IntArrayMap BALLOON_LIGHT = new Int2IntArrayMap();

@SubscribeEvent
private static void onRenderLevelStage(RenderLevelStageEvent event) {
ClientLevel level = Minecraft.getInstance().level;
EntityRenderDispatcher entityRenderDispatcher = Minecraft.getInstance().getEntityRenderDispatcher();
PoseStack stack = event.getPoseStack();
MultiBufferSource buffer = event.getLevelRenderer().renderBuffers.bufferSource();
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();

if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_SKY) {
PLAYER_LEFT_HAND_POS.clear();
PLAYER_RIGHT_HAND_POS.clear();
BALLOON_LIGHT.clear();
}

if (level != null && event.getStage() == RenderLevelStageEvent.Stage.AFTER_ENTITIES) {
stack.pushPose();
stack.translate(-cameraPos.x(), -cameraPos.y(), -cameraPos.z());
float partialTicks = Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(Minecraft.getInstance().level != null && Minecraft.getInstance().level.tickRateManager().runsNormally());
for (Entity entity : level.entitiesForRendering()) {
if (entity instanceof Balloon balloon) {
LivingEntity owner = balloon.getOwner();
if (owner instanceof Player player) {
HumanoidArm arm = balloon.isMainHand() ? player.getMainArm() : player.getMainArm().getOpposite();
Vec3 handPos = arm == HumanoidArm.RIGHT ? PLAYER_RIGHT_HAND_POS.get(player.getId()) : PLAYER_LEFT_HAND_POS.get(player.getId());
if (entityRenderDispatcher.options.getCameraType().isFirstPerson() && owner == Minecraft.getInstance().player) {
int hand = owner.getMainArm() == HumanoidArm.RIGHT ? 1 : -1;
if (!balloon.isMainHand()) {
hand = -hand;
}
Vec3 vec3 = entityRenderDispatcher.camera.getNearPlane().getPointOnPlane(hand * 1.2f, -1.2f).scale(960.0 / (double) entityRenderDispatcher.options.fov().get());
handPos = owner.getEyePosition(partialTicks).add(vec3);
}
if (handPos != null) {
stack.pushPose();
Vec3 entityPos = balloon.getPosition(partialTicks);
stack.translate(entityPos.x, entityPos.y, entityPos.z);
renderLeash(handPos, entityPos, BALLOON_LIGHT.getOrDefault(balloon.getId(), FULL_BRIGHT), stack, buffer);
stack.popPose();
}
}
}
}
stack.popPose();
}
}

private static void renderLeash(Vec3 from, Vec3 to, int light, PoseStack poseStack, MultiBufferSource bufferSource) {
poseStack.pushPose();
double d3 = to.x;
double d4 = to.y;
double d5 = to.z;
float f = (float) (from.x - d3);
float f1 = (float) (from.y - d4);
float f2 = (float) (from.z - d5);
VertexConsumer vertexconsumer = bufferSource.getBuffer(RenderType.leash());
Matrix4f matrix4f = poseStack.last().pose();
float f4 = Mth.invSqrt(f * f + f2 * f2) * 0.025F / 2.0F;
float f5 = f2 * f4;
float f6 = f * f4;

int j1;
for (j1 = 0; j1 <= 24; ++j1) {
addVertexPair(vertexconsumer, matrix4f, f, f1, f2, light, 0.025F, 0.025F, f5, f6, j1, false);
}

for (j1 = 24; j1 >= 0; --j1) {
addVertexPair(vertexconsumer, matrix4f, f, f1, f2, light, 0.025F, 0.0F, f5, f6, j1, true);
}

poseStack.popPose();
}

private static void addVertexPair(VertexConsumer buffer, Matrix4f pose, float startX, float startY, float startZ, int light, float yOffset, float dy, float dx, float dz, int index, boolean reverse) {
float f = (float) index / 24.0F;
float f1 = index % 2 == (reverse ? 1 : 0) ? 0.7F : 1.0F;
float f2 = 0.5F * f1;
float f3 = 0.4F * f1;
float f4 = 0.3F * f1;
float f5 = startX * f;
float f6 = startY > 0.0F ? startY * f * f : startY - startY * (1.0F - f) * (1.0F - f);
float f7 = startZ * f;
buffer.addVertex(pose, f5 - dx, f6 + dy, f7 + dz).setColor(f2, f3, f4, 1.0F).setLight(light);
buffer.addVertex(pose, f5 + dx, f6 + yOffset - dy, f7 - dz).setColor(f2, f3, f4, 1.0F).setLight(light);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package team.leomc.celebrations.client.event;

import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
Expand All @@ -10,23 +9,23 @@
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent;
import team.leomc.celebrations.Celebrations;
import team.leomc.celebrations.client.renderer.CoupletRenderer;
import team.leomc.celebrations.client.renderer.FuStickerRenderer;
import team.leomc.celebrations.client.renderer.HorizontalScrollRenderer;
import team.leomc.celebrations.client.model.entity.BalloonModel;
import team.leomc.celebrations.client.renderer.block.CoupletRenderer;
import team.leomc.celebrations.client.renderer.block.FuStickerRenderer;
import team.leomc.celebrations.client.renderer.block.HorizontalScrollRenderer;
import team.leomc.celebrations.client.renderer.entity.BalloonRenderer;
import team.leomc.celebrations.item.component.BalloonData;
import team.leomc.celebrations.item.component.PartyHat;
import team.leomc.celebrations.registry.CBlockEntities;
import team.leomc.celebrations.registry.CDataComponents;
import team.leomc.celebrations.registry.CEntities;
import team.leomc.celebrations.registry.CItems;

@OnlyIn(Dist.CLIENT)
@EventBusSubscriber(modid = Celebrations.ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public class CClientSetupEvents {
@SubscribeEvent
private static void onClientSetup(FMLClientSetupEvent event) {
BlockEntityRenderers.register(CBlockEntities.COUPLET.get(), CoupletRenderer::new);
BlockEntityRenderers.register(CBlockEntities.HORIZONTAL_SCROLL.get(), HorizontalScrollRenderer::new);
BlockEntityRenderers.register(CBlockEntities.FU_STICKER.get(), FuStickerRenderer::new);

ItemProperties.register(CItems.PARTY_HAT.get(), Celebrations.id("party_hat_type"), (itemStack, clientLevel, livingEntity, i) -> {
PartyHat partyHat = itemStack.get(CDataComponents.PART_HAT.get());
if (partyHat != null) {
Expand All @@ -40,16 +39,29 @@ private static void onClientSetup(FMLClientSetupEvent event) {
});
}

@SubscribeEvent
private static void onRegisterEntityRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(CEntities.BALLOON.get(), BalloonRenderer::new);
event.registerBlockEntityRenderer(CBlockEntities.COUPLET.get(), CoupletRenderer::new);
event.registerBlockEntityRenderer(CBlockEntities.HORIZONTAL_SCROLL.get(), HorizontalScrollRenderer::new);
event.registerBlockEntityRenderer(CBlockEntities.FU_STICKER.get(), FuStickerRenderer::new);
}

@SubscribeEvent
private static void onRegisterItemColorHandlers(RegisterColorHandlersEvent.Item event) {
event.register((itemStack, i) -> {
PartyHat hat = itemStack.get(CDataComponents.PART_HAT.get());
return i == 1 ? (hat == null ? -1 : hat.color().getTextureDiffuseColor()) : -1;
}, CItems.PARTY_HAT.get());
event.register((itemStack, i) -> {
BalloonData data = itemStack.get(CDataComponents.BALLOON_DATA.get());
return i == 1 ? (data == null ? -1 : data.color().getTextureDiffuseColor()) : -1;
}, CItems.BALLOON.get());
}

@SubscribeEvent
public static void onRegisterLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(BalloonModel.LAYER_LOCATION, BalloonModel::createBodyLayer);
event.registerLayerDefinition(CoupletRenderer.LAYER_LOCATION, CoupletRenderer::createCoupletLayer);
event.registerLayerDefinition(HorizontalScrollRenderer.LAYER_LOCATION, HorizontalScrollRenderer::createScrollLayer);
event.registerLayerDefinition(FuStickerRenderer.LAYER_LOCATION, FuStickerRenderer::createStickerLayer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.jetbrains.annotations.Nullable;
import team.leomc.celebrations.Celebrations;
import team.leomc.celebrations.block.entity.CoupletBlockEntity;
import team.leomc.celebrations.client.renderer.CoupletRenderer;
import team.leomc.celebrations.client.renderer.block.CoupletRenderer;
import team.leomc.celebrations.network.UpdateSignLikeTextPayload;
import team.leomc.celebrations.util.SignLikeText;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.jetbrains.annotations.Nullable;
import team.leomc.celebrations.Celebrations;
import team.leomc.celebrations.block.entity.HorizontalScrollBlockEntity;
import team.leomc.celebrations.client.renderer.HorizontalScrollRenderer;
import team.leomc.celebrations.client.renderer.block.HorizontalScrollRenderer;
import team.leomc.celebrations.network.UpdateSignLikeTextPayload;
import team.leomc.celebrations.util.SignLikeText;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package team.leomc.celebrations.client.model.entity;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import team.leomc.celebrations.Celebrations;
import team.leomc.celebrations.entity.Balloon;

@OnlyIn(Dist.CLIENT)
public class BalloonModel<T extends Balloon> extends EntityModel<T> {
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(Celebrations.id("balloon"), "main");
private final ModelPart root;

public BalloonModel(ModelPart root) {
this.root = root.getChild("root");
}

public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();

partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, -12.0F, -5.0F, 10.0F, 10.0F, 10.0F, new CubeDeformation(0.0F))
.texOffs(0, 20).addBox(-3.0F, -2.0F, -3.0F, 6.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F));

return LayerDefinition.create(meshdefinition, 64, 32);
}

@Override
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {

}

@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) {
root.render(poseStack, vertexConsumer, packedLight, packedOverlay, color);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@OnlyIn(Dist.CLIENT)
public class PartyHatRenderer {
public static final ResourceLocation PARTY_HAT = Celebrations.id("textures/entity/party_hat.png");
public static final ResourceLocation NEWSPAPER_HAT = Celebrations.id("textures/entity/newspaper_hat.png");

public static void render(ResourceLocation texture, float scale, boolean overlay, PoseStack poseStack, MultiBufferSource buffer, int color, int packedLight) {
VertexConsumer consumer = buffer.getBuffer(CRenderType.entityCutoutNoCullTriangles(texture));
Expand Down Expand Up @@ -86,6 +87,43 @@ public static void render(ResourceLocation texture, float scale, boolean overlay
poseStack.popPose();
}

public static void renderNewspaperHat(float scale, PoseStack poseStack, MultiBufferSource buffer, int color, int packedLight) {
VertexConsumer consumer = buffer.getBuffer(CRenderType.entityCutoutNoCullTriangles(NEWSPAPER_HAT));

float hatRadiusX = 10.5f / 16f;
float hatRadiusZ = 8.5f / 16f;
float hatHeight = 0.5f;

poseStack.pushPose();
poseStack.scale(scale, scale, scale);
PoseStack.Pose pose = poseStack.last();

vertex(consumer, pose, hatRadiusX, 0, 0, 0, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, 0, hatRadiusZ, 0.25f, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, hatHeight, 0, 2.655f / 28f, 0.342f / 16f, color, packedLight);

vertex(consumer, pose, hatRadiusX, 0, 0, 0.25f, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, 0, -hatRadiusZ, 0.25f * 2, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, hatHeight, 0, 2.655f / 28f + 0.25f, 0.342f / 16f, color, packedLight);

vertex(consumer, pose, -hatRadiusX, 0, 0, 0.25f * 2, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, 0, hatRadiusZ, 0.25f * 3, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, hatHeight, 0, 2.655f / 28f + 0.25f * 2, 0.342f / 16f, color, packedLight);

vertex(consumer, pose, -hatRadiusX, 0, 0, 0.25f * 3, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, 0, -hatRadiusZ, 0.25f * 4, 9f / 16f, color, packedLight);
vertex(consumer, pose, 0, hatHeight, 0, 2.655f / 28f + 0.25f * 3, 0.342f / 16f, color, packedLight);

VertexConsumer quadsConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(NEWSPAPER_HAT));

vertex(quadsConsumer, pose, 0, 0, hatRadiusZ, 0, 9.387f / 16f, color, packedLight);
vertex(quadsConsumer, pose, hatRadiusX, 0, 0, 1.387f / 28f, 1, color, packedLight);
vertex(quadsConsumer, pose, 0, 0, -hatRadiusZ, 8 / 28f, 1, color, packedLight);
vertex(quadsConsumer, pose, -hatRadiusX, 0, 0, (7 - 0.387f) / 28f, 9.387f / 16f, color, packedLight);

poseStack.popPose();
}

private static void vertex(VertexConsumer vertexConsumer, PoseStack.Pose pose, float x, float y, float z, float uvX, float uvY, int color, int light) {
vertexConsumer.addVertex(pose, x, y, z).setColor(color).setUv(uvX, uvY).setOverlay(OverlayTexture.NO_OVERLAY).setLight(light).setNormal(0.0F, 1.0F, 0.0F);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package team.leomc.celebrations.client.renderer;
package team.leomc.celebrations.client.renderer.block;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package team.leomc.celebrations.client.renderer;
package team.leomc.celebrations.client.renderer.block;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
Expand Down
Loading

0 comments on commit 993ab42

Please sign in to comment.