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;
|
package ru.dbotthepony.mc.otm.client.model;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
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.HumanoidModel;
|
||||||
|
import net.minecraft.client.model.PlayerModel;
|
||||||
import net.minecraft.client.model.geom.PartPose;
|
import net.minecraft.client.model.geom.PartPose;
|
||||||
import net.minecraft.client.model.geom.builders.CubeDeformation;
|
import net.minecraft.client.model.geom.builders.CubeDeformation;
|
||||||
import net.minecraft.client.model.geom.builders.CubeListBuilder;
|
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.model.geom.builders.PartDefinition;
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
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.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public final class ExosuitModel {
|
public final class ExosuitModel {
|
||||||
private ExosuitModel() {}
|
private ExosuitModel() {}
|
||||||
|
|
||||||
@ -84,40 +94,65 @@ public final class ExosuitModel {
|
|||||||
modelGlow.rightLeg.visible = false;
|
modelGlow.rightLeg.visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
private static final Set<PlayerRenderer> patchedRenderers = new ReferenceArraySet<>();
|
||||||
public static void onPlayerRendered(final RenderPlayerEvent.Post event) {
|
|
||||||
var cap = event.getEntity().getCapability(MatteryCapability.MATTERY_PLAYER);
|
|
||||||
|
|
||||||
if (!cap.isPresent()) {
|
private static class ExosuitLayer extends RenderLayer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
|
||||||
return;
|
public ExosuitLayer(RenderLayerParent<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> p_117346_) {
|
||||||
|
super(p_117346_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cap.resolve().get().getHasExoSuit()) {
|
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||||
var model = event.getRenderer().getModel();
|
@Override
|
||||||
model.copyPropertiesTo(modelNormal);
|
public void render(
|
||||||
model.copyPropertiesTo(modelGlow);
|
@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(
|
int overlayCoords = LivingEntityRenderer.getOverlayCoords(player, 0f);
|
||||||
event.getPoseStack(),
|
var rendertype = RenderType.entityCutoutNoCull(texture);
|
||||||
event.getMultiBufferSource().getBuffer(rendertype),
|
|
||||||
event.getPackedLight(),
|
|
||||||
overlayCoords,
|
|
||||||
// rgba
|
|
||||||
1f, 1f, 1f, 1f
|
|
||||||
);
|
|
||||||
|
|
||||||
modelGlow.renderToBuffer(
|
modelNormal.renderToBuffer(
|
||||||
event.getPoseStack(),
|
poseStack,
|
||||||
event.getMultiBufferSource().getBuffer(rendertype),
|
bufferSource.getBuffer(rendertype),
|
||||||
event.getPackedLight(),
|
packedLight,
|
||||||
overlayCoords,
|
overlayCoords,
|
||||||
// rgba
|
// rgba
|
||||||
1f, 1f, 1f, 1f
|
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