ah yes, no hooks for layers
This commit is contained in:
parent
16bd9cd20a
commit
5a76223f14
@ -1,7 +1,10 @@
|
||||
package ru.dbotthepony.mc.otm.client.model;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import it.unimi.dsi.fastutil.objects.ReferenceArraySet;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
import net.minecraft.client.model.PlayerModel;
|
||||
import net.minecraft.client.model.geom.PartPose;
|
||||
import net.minecraft.client.model.geom.builders.CubeDeformation;
|
||||
import net.minecraft.client.model.geom.builders.CubeListBuilder;
|
||||
@ -10,13 +13,20 @@ import net.minecraft.client.model.geom.builders.MeshDefinition;
|
||||
import net.minecraft.client.model.geom.builders.PartDefinition;
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.RenderLayerParent;
|
||||
import net.minecraft.client.renderer.entity.layers.RenderLayer;
|
||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Set;
|
||||
|
||||
public final class ExosuitModel {
|
||||
private ExosuitModel() {}
|
||||
|
||||
@ -84,40 +94,65 @@ public final class ExosuitModel {
|
||||
modelGlow.rightLeg.visible = false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
public static void onPlayerRendered(final RenderPlayerEvent.Post event) {
|
||||
var cap = event.getEntity().getCapability(MatteryCapability.MATTERY_PLAYER);
|
||||
private static final Set<PlayerRenderer> patchedRenderers = new ReferenceArraySet<>();
|
||||
|
||||
if (!cap.isPresent()) {
|
||||
return;
|
||||
private static class ExosuitLayer extends RenderLayer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
|
||||
public ExosuitLayer(RenderLayerParent<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> p_117346_) {
|
||||
super(p_117346_);
|
||||
}
|
||||
|
||||
if (cap.resolve().get().getHasExoSuit()) {
|
||||
var model = event.getRenderer().getModel();
|
||||
model.copyPropertiesTo(modelNormal);
|
||||
model.copyPropertiesTo(modelGlow);
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
@Override
|
||||
public void render(
|
||||
@Nonnull PoseStack poseStack,
|
||||
@Nonnull MultiBufferSource bufferSource,
|
||||
int packedLight,
|
||||
@Nonnull AbstractClientPlayer player,
|
||||
float p_117353_,
|
||||
float p_117354_,
|
||||
float p_117355_,
|
||||
float p_117356_,
|
||||
float p_117357_,
|
||||
float p_117358_
|
||||
) {
|
||||
var cap = player.getCapability(MatteryCapability.MATTERY_PLAYER);
|
||||
|
||||
int overlayCoords = LivingEntityRenderer.getOverlayCoords(event.getEntity(), 0f);
|
||||
if (!cap.isPresent()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var rendertype = RenderType.entityCutoutNoCull(texture);
|
||||
if (cap.resolve().get().getHasExoSuit()) {
|
||||
var model = getParentModel();
|
||||
model.copyPropertiesTo(modelNormal);
|
||||
model.copyPropertiesTo(modelGlow);
|
||||
|
||||
modelNormal.renderToBuffer(
|
||||
event.getPoseStack(),
|
||||
event.getMultiBufferSource().getBuffer(rendertype),
|
||||
event.getPackedLight(),
|
||||
overlayCoords,
|
||||
// rgba
|
||||
1f, 1f, 1f, 1f
|
||||
);
|
||||
int overlayCoords = LivingEntityRenderer.getOverlayCoords(player, 0f);
|
||||
var rendertype = RenderType.entityCutoutNoCull(texture);
|
||||
|
||||
modelGlow.renderToBuffer(
|
||||
event.getPoseStack(),
|
||||
event.getMultiBufferSource().getBuffer(rendertype),
|
||||
event.getPackedLight(),
|
||||
overlayCoords,
|
||||
// rgba
|
||||
1f, 1f, 1f, 1f
|
||||
);
|
||||
modelNormal.renderToBuffer(
|
||||
poseStack,
|
||||
bufferSource.getBuffer(rendertype),
|
||||
packedLight,
|
||||
overlayCoords,
|
||||
// rgba
|
||||
1f, 1f, 1f, 1f
|
||||
);
|
||||
|
||||
modelGlow.renderToBuffer(
|
||||
poseStack,
|
||||
bufferSource.getBuffer(rendertype),
|
||||
packedLight,
|
||||
overlayCoords,
|
||||
// rgba
|
||||
1f, 1f, 1f, 1f
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void onPlayerRendered(final RenderPlayerEvent.Post event) {
|
||||
if (patchedRenderers.add(event.getRenderer())) {
|
||||
event.getRenderer().addLayer(new ExosuitLayer(event.getRenderer()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user