mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-14 01:04:24 +00:00
Fix EntityRendererEventsTest crashing dedicated server when running forge_test_server in forgedev (#7930)
This commit is contained in:
1 parent
6ddf56ef15
commit
76da41dd46
1 file changed
+94
-89
+94
-89
@@ -48,13 +48,10 @@ import net.minecraftforge.registries.ObjectHolder;
|
||||
import java.util.Collections;
|
||||
|
||||
@Mod("entity_renderer_events_test")
|
||||
@Mod.EventBusSubscriber(value= Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD)
|
||||
@Mod.EventBusSubscriber(modid="entity_renderer_events_test", bus= Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class EntityRendererEventsTest
|
||||
{
|
||||
private static final ResourceLocation MY_ENTITY = new ResourceLocation("entity_renderer_events_test", "test_entity");
|
||||
private static final ModelLayerLocation MAIN_LAYER = new ModelLayerLocation(MY_ENTITY, "main");
|
||||
private static final ModelLayerLocation OUTER_LAYER = new ModelLayerLocation(MY_ENTITY, "main");
|
||||
private static final ModelLayerLocation ADDED_LAYER = new ModelLayerLocation(MY_ENTITY, "added");
|
||||
|
||||
@ObjectHolder("entity_renderer_events_test:test_entity")
|
||||
public static EntityType<MyEntity> MY_ENTITY_TYPE;
|
||||
@@ -64,110 +61,118 @@ public class EntityRendererEventsTest
|
||||
{
|
||||
event.getRegistry().register(EntityType.Builder.of(MyEntity::new, MobCategory.MONSTER).build("test_entity").setRegistryName("test_entity"));
|
||||
}
|
||||
|
||||
|
||||
@SubscribeEvent
|
||||
public static void entityRegistry(EntityAttributeCreationEvent event)
|
||||
{
|
||||
event.put(MY_ENTITY_TYPE, Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 1.0D).build());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void layerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event)
|
||||
@Mod.EventBusSubscriber(value= Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD)
|
||||
private static class EntityRenderEventsTestClientModStuff
|
||||
{
|
||||
event.registerLayerDefinition(MAIN_LAYER, MyEntityModel::createMainLayer);
|
||||
event.registerLayerDefinition(OUTER_LAYER, () -> MyEntityModel.createLayer(new CubeDeformation(1.0f)));
|
||||
event.registerLayerDefinition(ADDED_LAYER, () -> MyEntityModel.createLayer(new CubeDeformation(2.0f)));
|
||||
}
|
||||
private static final ModelLayerLocation MAIN_LAYER = new ModelLayerLocation(MY_ENTITY, "main");
|
||||
private static final ModelLayerLocation OUTER_LAYER = new ModelLayerLocation(MY_ENTITY, "main");
|
||||
private static final ModelLayerLocation ADDED_LAYER = new ModelLayerLocation(MY_ENTITY, "added");
|
||||
|
||||
@SubscribeEvent
|
||||
public static void entityRenderers(EntityRenderersEvent.RegisterRenderers event)
|
||||
{
|
||||
event.registerEntityRenderer(MY_ENTITY_TYPE, MyEntityRenderer::new);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void entityLayers(EntityRenderersEvent.AddLayers event)
|
||||
{
|
||||
MyEntityRenderer renderer = event.getRenderer(MY_ENTITY_TYPE);
|
||||
renderer.addLayer(new MyEntityLayer(renderer, new MyEntityModel(event.getEntityModels().bakeLayer(ADDED_LAYER)), 0.5f));
|
||||
}
|
||||
|
||||
private static class MyEntityModel extends EntityModel<MyEntity>
|
||||
{
|
||||
public static final String BODY = "body";
|
||||
public static final String HEAD = "head";
|
||||
|
||||
public static LayerDefinition createMainLayer()
|
||||
@SubscribeEvent
|
||||
public static void layerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event)
|
||||
{
|
||||
return createLayer(CubeDeformation.NONE);
|
||||
event.registerLayerDefinition(MAIN_LAYER, MyEntityModel::createMainLayer);
|
||||
event.registerLayerDefinition(OUTER_LAYER, () -> MyEntityModel.createLayer(new CubeDeformation(1.0f)));
|
||||
event.registerLayerDefinition(ADDED_LAYER, () -> MyEntityModel.createLayer(new CubeDeformation(2.0f)));
|
||||
}
|
||||
|
||||
public static LayerDefinition createLayer(CubeDeformation deformation)
|
||||
@SubscribeEvent
|
||||
public static void entityRenderers(EntityRenderersEvent.RegisterRenderers event)
|
||||
{
|
||||
MeshDefinition definition = new MeshDefinition();
|
||||
PartDefinition root = definition.getRoot();
|
||||
root.addOrReplaceChild(BODY, CubeListBuilder.create().addBox(-4,0,-4,4,10,4, deformation), PartPose.ZERO);
|
||||
root.addOrReplaceChild(HEAD, CubeListBuilder.create().addBox(-2,10,-2,2,4,2, deformation), PartPose.ZERO);
|
||||
return LayerDefinition.create(definition, 64, 32);
|
||||
event.registerEntityRenderer(MY_ENTITY_TYPE, MyEntityRenderer::new);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void entityLayers(EntityRenderersEvent.AddLayers event)
|
||||
{
|
||||
MyEntityRenderer renderer = event.getRenderer(MY_ENTITY_TYPE);
|
||||
renderer.addLayer(new MyEntityLayer(renderer, new MyEntityModel(event.getEntityModels().bakeLayer(ADDED_LAYER)), 0.5f));
|
||||
}
|
||||
|
||||
private static class MyEntityModel extends EntityModel<MyEntity>
|
||||
{
|
||||
public static final String BODY = "body";
|
||||
public static final String HEAD = "head";
|
||||
|
||||
public static LayerDefinition createMainLayer()
|
||||
{
|
||||
return createLayer(CubeDeformation.NONE);
|
||||
}
|
||||
|
||||
public static LayerDefinition createLayer(CubeDeformation deformation)
|
||||
{
|
||||
MeshDefinition definition = new MeshDefinition();
|
||||
PartDefinition root = definition.getRoot();
|
||||
root.addOrReplaceChild(BODY, CubeListBuilder.create().addBox(-4,0,-4,4,10,4, deformation), PartPose.ZERO);
|
||||
root.addOrReplaceChild(HEAD, CubeListBuilder.create().addBox(-2,10,-2,2,4,2, deformation), PartPose.ZERO);
|
||||
return LayerDefinition.create(definition, 64, 32);
|
||||
}
|
||||
|
||||
private final ModelPart headRenderer;
|
||||
private final ModelPart bodyRenderer;
|
||||
|
||||
public MyEntityModel(ModelPart modelPart)
|
||||
{
|
||||
this.headRenderer = modelPart.getChild(HEAD);
|
||||
this.bodyRenderer = modelPart.getChild(BODY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupAnim(MyEntity p_102618_, float p_102619_, float p_102620_, float p_102621_, float p_102622_, float p_102623_)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha)
|
||||
{
|
||||
headRenderer.render(poseStack, vertexConsumer, packedLightIn, packedOverlayIn, red, green, blue, alpha);
|
||||
bodyRenderer.render(poseStack, vertexConsumer, packedLightIn, packedOverlayIn, red, green, blue, alpha);
|
||||
}
|
||||
}
|
||||
|
||||
private final ModelPart headRenderer;
|
||||
private final ModelPart bodyRenderer;
|
||||
|
||||
public MyEntityModel(ModelPart modelPart)
|
||||
private static class MyEntityRenderer extends LivingEntityRenderer<MyEntity, MyEntityModel>
|
||||
{
|
||||
this.headRenderer = modelPart.getChild(HEAD);
|
||||
this.bodyRenderer = modelPart.getChild(BODY);
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("entity_renderer_events_test:textures/entity/test_entity.png");
|
||||
|
||||
public MyEntityRenderer(EntityRendererProvider.Context context)
|
||||
{
|
||||
super(context, new MyEntityModel(context.bakeLayer(MAIN_LAYER)), 1.0f);
|
||||
addLayer(new MyEntityLayer(this, new MyEntityModel(context.bakeLayer(OUTER_LAYER)), 0.1f));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(MyEntity p_114482_)
|
||||
{
|
||||
return TEXTURE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupAnim(MyEntity p_102618_, float p_102619_, float p_102620_, float p_102621_, float p_102622_, float p_102623_)
|
||||
|
||||
private static class MyEntityLayer extends RenderLayer<MyEntity, MyEntityModel>
|
||||
{
|
||||
private final MyEntityModel model;
|
||||
private final float r;
|
||||
|
||||
}
|
||||
public MyEntityLayer(MyEntityRenderer renderer, MyEntityModel model, float r)
|
||||
{
|
||||
super(renderer);
|
||||
this.model = model;
|
||||
this.r = r;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha)
|
||||
{
|
||||
headRenderer.render(poseStack, vertexConsumer, packedLightIn, packedOverlayIn, red, green, blue, alpha);
|
||||
bodyRenderer.render(poseStack, vertexConsumer, packedLightIn, packedOverlayIn, red, green, blue, alpha);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyEntityRenderer extends LivingEntityRenderer<MyEntity, MyEntityModel>
|
||||
{
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("entity_renderer_events_test:textures/entity/test_entity.png");
|
||||
|
||||
public MyEntityRenderer(EntityRendererProvider.Context context)
|
||||
{
|
||||
super(context, new MyEntityModel(context.bakeLayer(MAIN_LAYER)), 1.0f);
|
||||
addLayer(new MyEntityLayer(this, new MyEntityModel(context.bakeLayer(OUTER_LAYER)), 0.1f));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(MyEntity p_114482_)
|
||||
{
|
||||
return TEXTURE;
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyEntityLayer extends RenderLayer<MyEntity, MyEntityModel>
|
||||
{
|
||||
private final MyEntityModel model;
|
||||
private final float r;
|
||||
|
||||
public MyEntityLayer(MyEntityRenderer renderer, MyEntityModel model, float r)
|
||||
{
|
||||
super(renderer);
|
||||
this.model = model;
|
||||
this.r = r;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(PoseStack poseStack, MultiBufferSource bufferSource, int lightness, MyEntity entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch)
|
||||
{
|
||||
VertexConsumer vertexConsumer = bufferSource.getBuffer(this.getParentModel().renderType(this.getTextureLocation(entity)));
|
||||
model.renderToBuffer(poseStack, vertexConsumer, lightness, OverlayTexture.NO_OVERLAY, r, 1.0f, 1.0f, 1.0f);
|
||||
@Override
|
||||
public void render(PoseStack poseStack, MultiBufferSource bufferSource, int lightness, MyEntity entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch)
|
||||
{
|
||||
VertexConsumer vertexConsumer = bufferSource.getBuffer(this.getParentModel().renderType(this.getTextureLocation(entity)));
|
||||
model.renderToBuffer(poseStack, vertexConsumer, lightness, OverlayTexture.NO_OVERLAY, r, 1.0f, 1.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user