State Based Models - renders a specific collection of models if a certain state is active, added event for when punched

This commit is contained in:
Halbear
2026-05-26 04:14:57 +01:00
parent 613809fd15
commit 7e1e95342a
14 changed files with 377 additions and 47 deletions
@@ -9,12 +9,15 @@ import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.stats.Stat;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.math.vector.Vector3f;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityModel<VehicleBaseEntity>> extends EntityRenderer<T> { public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityModel<VehicleBaseEntity>> extends EntityRenderer<T> {
@@ -23,12 +26,30 @@ public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityMo
private Vector3d OriginOffset = new Vector3d(0,0,0); private Vector3d OriginOffset = new Vector3d(0,0,0);
private M[] models; private final Map<String, M[]> STATE_BASED_MODELS = new HashMap<>();
private String RenderState = "DEFAULT";
private final String TextureLocation; private final String TextureLocation;
protected VehicleBaseRenderer(EntityRendererManager renderManager, M[] models, String TextureLocation) { private final Map<String, String> STATE_BASED_TEXTURE_LOCATIONS = new HashMap<>();
protected VehicleBaseRenderer(EntityRendererManager renderManager, M[] DefaultModels, String TextureLocation) {
super(renderManager); super(renderManager);
this.TextureLocation = TextureLocation; this.TextureLocation = TextureLocation;
this.models = models; STATE_BASED_TEXTURE_LOCATIONS.put("DEFAULT",TextureLocation);
STATE_BASED_MODELS.put("DEFAULT",DefaultModels);
}
public VehicleBaseRenderer AddRendererState(String StateName, M[] NewState, String StateTextureLocation){
STATE_BASED_MODELS.put(StateName, NewState);
STATE_BASED_TEXTURE_LOCATIONS.put(StateName,StateTextureLocation);
return this;
}
public VehicleBaseRenderer AddRendererState(String StateName, M[] NewState){
STATE_BASED_MODELS.put(StateName, NewState);
STATE_BASED_TEXTURE_LOCATIONS.put(StateName,STATE_BASED_TEXTURE_LOCATIONS.get("DEFAULT"));
return this;
} }
public VehicleBaseRenderer SetPivotPoint(PivotOrigin OriginType, Vector3d Offset){ public VehicleBaseRenderer SetPivotPoint(PivotOrigin OriginType, Vector3d Offset){
@@ -54,9 +75,10 @@ public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityMo
@Override @Override
public void render(T entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) { public void render(T entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) {
EventBeforeRender(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight); RenderState = entity.GetRenderState();
if(!STATE_BASED_MODELS.containsKey(RenderState)) RenderState = "DEFAULT";
matrixStack.push(); matrixStack.push();
EventBeforeRender(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight);
Vector3d OriginPosition = new Vector3d(0,0,0).add(OriginOffset); Vector3d OriginPosition = new Vector3d(0,0,0).add(OriginOffset);
Vector3f Rotations = new Vector3f(180.0F - entity.GetVehicleYaw(),entity.GetVehiclePitch(),entity.GetVehicleRoll()); Vector3f Rotations = new Vector3f(180.0F - entity.GetVehicleYaw(),entity.GetVehiclePitch(),entity.GetVehicleRoll());
switch(OriginType) { switch(OriginType) {
@@ -77,20 +99,19 @@ public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityMo
matrixStack.translate( -OriginPosition.x, -OriginPosition.y, -OriginPosition.z); matrixStack.translate( -OriginPosition.x, -OriginPosition.y, -OriginPosition.z);
matrixStack.scale(-1.0F, -1.0F, 1.0F); matrixStack.scale(-1.0F, -1.0F, 1.0F);
matrixStack.translate(0.0D, -1.5D, 0.0D); matrixStack.translate(0.0D, -1.5D, 0.0D);
Arrays.asList(models).forEach(model->{ Arrays.asList(STATE_BASED_MODELS.get(RenderState)).forEach(model->{
IVertexBuilder vertexBuilder = buffer.getBuffer(model.getRenderType(getEntityTexture(entity))); IVertexBuilder vertexBuilder = buffer.getBuffer(model.getRenderType(getEntityTexture(entity)));
model.setRotationAngles(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); model.setRotationAngles(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F);
model.render(matrixStack, vertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); model.render(matrixStack, vertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F);
}); });
matrixStack.pop(); matrixStack.pop();
super.render(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight); super.render(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight);
EventAfterRender(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight); EventAfterRender(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight);
} }
@Override @Override
@Nonnull @Nonnull
public ResourceLocation getEntityTexture(T entity) { public ResourceLocation getEntityTexture(T entity) {
return new ResourceLocation(Halsvehicleframework.MOD_ID,TextureLocation); return new ResourceLocation(Halsvehicleframework.MOD_ID,STATE_BASED_TEXTURE_LOCATIONS.get(RenderState));
} }
} }
@@ -69,6 +69,13 @@ public class VehicleBaseEntity extends Entity {
BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION_SPEED",0F); BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION_SPEED",0F);
BASE_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM",(float)vehicleBuildInfo.GetMaxEngineRPM()); BASE_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM",(float)vehicleBuildInfo.GetMaxEngineRPM());
BASE_INT_PARAMETERS.put("THROTTLE",0); BASE_INT_PARAMETERS.put("THROTTLE",0);
BASE_INT_PARAMETERS.put("FUEL_TANK_COUNT",vehicleBuildInfo.GetFuelTanks().size());
for(int i = 0; i < vehicleBuildInfo.GetFuelTanks().size(); i++){
BASE_FLOAT_PARAMETERS.put("FUEL_TANK_" + i +"_FUEL_CAPACITY", vehicleBuildInfo.GetFuelTanks().get(i));
BASE_FLOAT_PARAMETERS.put("FUEL_TANK_" + i +"_FUEL_LEVEL", 0f);
}
BASE_STRING_PARAMETERS.put("FUEL_TYPE",vehicleBuildInfo.GetFuelType().toString());
BASE_STRING_PARAMETERS.put("RENDER_STATE","DEFAULT");
BASE_INT_PARAMETERS.put("YAW_CONTROL_INPUT",0); BASE_INT_PARAMETERS.put("YAW_CONTROL_INPUT",0);
BASE_INT_PARAMETERS.put("ROLL_CONTROL_INPUT",0); BASE_INT_PARAMETERS.put("ROLL_CONTROL_INPUT",0);
BASE_INT_PARAMETERS.put("PITCH_CONTROL_INPUT",0); BASE_INT_PARAMETERS.put("PITCH_CONTROL_INPUT",0);
@@ -94,7 +101,12 @@ public class VehicleBaseEntity extends Entity {
BASE_BOOL_PARAMETERS.forEach(SyncedData::putBoolean); BASE_BOOL_PARAMETERS.forEach(SyncedData::putBoolean);
this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData);
} }
public void SetRenderState(String NewState){
SetStringDataValue("RENDER_STATE",NewState);
}
public String GetRenderState(){
return GetStringDataValue("RENDER_STATE");
}
public void SetIntDataValue(String ValueName, Integer Value){ public void SetIntDataValue(String ValueName, Integer Value){
CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy();
SyncedData.putInt(ValueName,Value); SyncedData.putInt(ValueName,Value);
@@ -152,6 +164,10 @@ public class VehicleBaseEntity extends Entity {
SetVehiclePitch(Pitch); SetVehiclePitch(Pitch);
} }
public void OnPunchedEvent(){
}
@Override @Override
protected void registerData() { protected void registerData() {
this.dataManager.register(VEHICLE_SYNCHED_PARAMETERS, new CompoundNBT()); this.dataManager.register(VEHICLE_SYNCHED_PARAMETERS, new CompoundNBT());
@@ -1,16 +0,0 @@
package net.halbear.hvf.Example.Renderer;
import net.halbear.hvf.Example.Renderer.Models.AeroplaneModel;
import net.halbear.hvf.Entity.Renderer.VehicleBaseRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class AeroplaneRenderer extends VehicleBaseRenderer {
public AeroplaneRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn, new EntityModel<?>[]{new AeroplaneModel()},"textures/entities/biplaneupdated.png");
}
}
@@ -1,7 +1,7 @@
package net.halbear.hvf.Registry.EventHandlers; package net.halbear.hvf.Registry.EventHandlers;
import net.halbear.hvf.Example.Renderer.AeroplaneRenderer; import net.halbear.hvf.UsageExamples.Aeroplane.Renderer.AeroplaneRenderer;
import net.halbear.hvf.Example.Renderer.AirboatRenderer; import net.halbear.hvf.UsageExamples.Airboat.Renderer.AirboatRenderer;
import net.halbear.hvf.Halsvehicleframework; import net.halbear.hvf.Halsvehicleframework;
import net.halbear.hvf.Registry.ModEntities; import net.halbear.hvf.Registry.ModEntities;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@@ -16,12 +16,8 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@Mod.EventBusSubscriber(modid = Halsvehicleframework.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) @Mod.EventBusSubscriber(modid = Halsvehicleframework.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class ClientEventHandler { public class ClientEventHandler {
@SafeVarargs
public static void SetCollectionRenderType(RenderType type, RegistryObject<Block>... blocks_list) { //hal //This is for the example entities, will be removed in the final mod
for (RegistryObject<Block> blockRegistryObject : blocks_list) {
RenderTypeLookup.setRenderLayer(blockRegistryObject.get(), type);
}
}
@SubscribeEvent @SubscribeEvent
public static void init(final FMLClientSetupEvent event) { public static void init(final FMLClientSetupEvent event) {
RenderingRegistry.registerEntityRenderingHandler(ModEntities.AEROPLANE.get(), AeroplaneRenderer::new); RenderingRegistry.registerEntityRenderingHandler(ModEntities.AEROPLANE.get(), AeroplaneRenderer::new);
@@ -0,0 +1,22 @@
package net.halbear.hvf.Registry.EventHandlers;
import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.halbear.hvf.Halsvehicleframework;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber(modid = Halsvehicleframework.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class ModEventHandler {
@SubscribeEvent
public static void onEntityPunch(AttackEntityEvent event) {
PlayerEntity player = event.getPlayer();
Entity Vehicle = event.getTarget();
if (player.world.isRemote()) { return; }
if (Vehicle instanceof VehicleBaseEntity) {((VehicleBaseEntity) Vehicle).OnPunchedEvent();}
}
}
@@ -1,7 +1,7 @@
package net.halbear.hvf.Registry; package net.halbear.hvf.Registry;
import net.halbear.hvf.Example.Aeroplane; import net.halbear.hvf.UsageExamples.Aeroplane.Aeroplane;
import net.halbear.hvf.Example.Airboat; import net.halbear.hvf.UsageExamples.Airboat.Airboat;
import net.halbear.hvf.Halsvehicleframework; import net.halbear.hvf.Halsvehicleframework;
import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@@ -1,6 +1,5 @@
package net.halbear.hvf.Example; package net.halbear.hvf.UsageExamples.Aeroplane;
import net.halbear.hvf.Entity.Renderer.VehicleAnimationManager;
import net.halbear.hvf.Entity.VehicleBaseEntity; import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.halbear.hvf.Util.Client.VehicleCameraPreset; import net.halbear.hvf.Util.Client.VehicleCameraPreset;
import net.halbear.hvf.Util.Client.VehicleCameraSettings; import net.halbear.hvf.Util.Client.VehicleCameraSettings;
@@ -31,6 +30,11 @@ public class Aeroplane extends VehicleBaseEntity {
SetFloatDataValue("PROPELLER_ROTATION_SPEED",(float)(Math.random() * 40)); SetFloatDataValue("PROPELLER_ROTATION_SPEED",(float)(Math.random() * 40));
} }
@Override
public void OnPunchedEvent(){
SetRenderState("DAMAGED");
}
@Override @Override
public void TickUpdateEvent(){ public void TickUpdateEvent(){
@@ -0,0 +1,32 @@
package net.halbear.hvf.UsageExamples.Aeroplane.Renderer;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.halbear.hvf.UsageExamples.Aeroplane.Renderer.Models.AeroplaneModel;
import net.halbear.hvf.Entity.Renderer.VehicleBaseRenderer;
import net.halbear.hvf.UsageExamples.Aeroplane.Renderer.Models.DamagedPlane;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class AeroplaneRenderer extends VehicleBaseRenderer {
public AeroplaneRenderer(EntityRendererManager renderManagerIn) {
super(renderManagerIn, new EntityModel<?>[]{new AeroplaneModel()},"textures/entities/biplaneupdated.png");
AddRendererState("DAMAGED",new EntityModel<?>[]{new DamagedPlane()});
AddRendererState("SUPER_DAMAGED",new EntityModel<?>[]{new DamagedPlane()},"textures/entities/biplaneupdated_DAMAGED.png");
}
@Override
public void EventBeforeRender(VehicleBaseEntity entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight){
}
@Override
public void EventAfterRender(VehicleBaseEntity entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight){
}
}
@@ -1,10 +1,9 @@
package net.halbear.hvf.Example.Renderer.Models; package net.halbear.hvf.UsageExamples.Aeroplane.Renderer.Models;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder; import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.halbear.hvf.Entity.Renderer.AnimationAxis; import net.halbear.hvf.Entity.Renderer.AnimationAxis;
import net.halbear.hvf.Entity.Renderer.VehicleAnimationManager; import net.halbear.hvf.UsageExamples.Aeroplane.Aeroplane;
import net.halbear.hvf.Example.Aeroplane;
import net.halbear.hvf.Entity.VehicleBaseEntity; import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.model.ModelRenderer; import net.minecraft.client.renderer.model.ModelRenderer;
@@ -0,0 +1,258 @@
package net.halbear.hvf.UsageExamples.Aeroplane.Renderer.Models;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.halbear.hvf.Entity.Renderer.AnimationAxis;
import net.halbear.hvf.UsageExamples.Aeroplane.Aeroplane;
import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.model.ModelRenderer;
public class DamagedPlane extends EntityModel<VehicleBaseEntity> {
private final ModelRenderer Body;
private final ModelRenderer cube_r1;
private final ModelRenderer cube_r2;
private final ModelRenderer cube_r3;
private final ModelRenderer cube_r4;
private final ModelRenderer cube_r5;
private final ModelRenderer cube_r6;
private final ModelRenderer cube_r7;
private final ModelRenderer cube_r8;
private final ModelRenderer cube_r9;
private final ModelRenderer cube_r10;
private final ModelRenderer cube_r11;
private final ModelRenderer cube_r12;
private final ModelRenderer cube_r13;
private final ModelRenderer cube_r14;
private final ModelRenderer cube_r15;
private final ModelRenderer cube_r16;
private final ModelRenderer cube_r17;
private final ModelRenderer cube_r18;
private final ModelRenderer cube_r19;
private final ModelRenderer cube_r20;
private final ModelRenderer cube_r21;
private final ModelRenderer cube_r22;
private final ModelRenderer cube_r23;
private final ModelRenderer cube_r24;
private final ModelRenderer cube_r25;
private final ModelRenderer cube_r26;
private final ModelRenderer cube_r27;
private final ModelRenderer propeller;
private final ModelRenderer cube_r28;
public DamagedPlane() {
textureWidth = 512;
textureHeight = 512;
Body = new ModelRenderer(this);
Body.setRotationPoint(0.0F, 3.0F, -9.0F);
Body.setTextureOffset(144, 0).addBox(-5.0F, 7.25F, -12.0F, 10.0F, 2.0F, 32.0F, 0.0F, false);
Body.setTextureOffset(96, 43).addBox(-2.0F, -6.0F, 34.0F, 4.0F, 2.0F, 10.0F, 0.0F, false);
Body.setTextureOffset(0, 92).addBox(-2.0F, -6.0F, 50.0F, 4.0F, 10.0F, 6.0F, 0.0F, false);
Body.setTextureOffset(292, 89).addBox(11.0F, 13.0F, -4.0F, 2.0F, 8.0F, 8.0F, 0.0F, false);
Body.setTextureOffset(9, 207).addBox(9.0F, 16.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, false);
cube_r1 = new ModelRenderer(this);
cube_r1.setRotationPoint(9.0F, 18.0F, 0.0F);
Body.addChild(cube_r1);
setRotationAngle(cube_r1, 0.0F, 0.0F, -0.4363F);
cube_r1.setTextureOffset(10, 205).addBox(0.0F, -12.0F, -1.0F, 2.0F, 12.0F, 2.0F, 0.0F, false);
cube_r2 = new ModelRenderer(this);
cube_r2.setRotationPoint(-11.0F, 4.5F, 21.0F);
Body.addChild(cube_r2);
setRotationAngle(cube_r2, 0.2659F, 0.008F, -0.0169F);
cube_r2.setTextureOffset(162, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false);
cube_r3 = new ModelRenderer(this);
cube_r3.setRotationPoint(11.0F, 4.5F, 21.0F);
Body.addChild(cube_r3);
setRotationAngle(cube_r3, 0.2659F, -0.008F, 0.0169F);
cube_r3.setTextureOffset(170, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false);
cube_r4 = new ModelRenderer(this);
cube_r4.setRotationPoint(-11.1935F, -5.629F, -1.7596F);
Body.addChild(cube_r4);
setRotationAngle(cube_r4, 0.2223F, 0.008F, -0.0169F);
cube_r4.setTextureOffset(52, 21).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false);
cube_r5 = new ModelRenderer(this);
cube_r5.setRotationPoint(11.1935F, -5.629F, -1.7596F);
Body.addChild(cube_r5);
setRotationAngle(cube_r5, 0.2223F, -0.008F, 0.0169F);
cube_r5.setTextureOffset(178, 177).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false);
cube_r6 = new ModelRenderer(this);
cube_r6.setRotationPoint(0.0F, 11.0F, 7.0F);
Body.addChild(cube_r6);
setRotationAngle(cube_r6, 0.0F, 0.0F, -0.0873F);
cube_r6.setTextureOffset(0, 92).addBox(-26.0F, -6.0F, -9.0F, 52.0F, 2.0F, 24.0F, 0.0F, false);
cube_r7 = new ModelRenderer(this);
cube_r7.setRotationPoint(0.0F, 11.0F, 7.0F);
Body.addChild(cube_r7);
setRotationAngle(cube_r7, 0.0F, 0.0F, 0.0873F);
cube_r7.setTextureOffset(0, 92).addBox(-26.0F, -29.0F, -14.0F, 52.0F, 2.0F, 24.0F, 0.0F, false);
cube_r8 = new ModelRenderer(this);
cube_r8.setRotationPoint(0.0F, -1.5F, 0.0F);
Body.addChild(cube_r8);
setRotationAngle(cube_r8, -0.3491F, 0.0F, 0.0F);
cube_r8.setTextureOffset(0, 0).addBox(-0.5F, -2.5F, 1.0F, 1.0F, 9.0F, 1.0F, 0.0F, false);
cube_r9 = new ModelRenderer(this);
cube_r9.setRotationPoint(-10.0F, -3.0F, 52.0F);
Body.addChild(cube_r9);
setRotationAngle(cube_r9, -0.3054F, 0.0F, -1.5708F);
cube_r9.setTextureOffset(144, 0).addBox(-1.0F, -9.0F, -6.0F, 2.0F, 18.0F, 12.0F, 0.0F, false);
cube_r10 = new ModelRenderer(this);
cube_r10.setRotationPoint(0.0F, -15.0F, 50.0F);
Body.addChild(cube_r10);
setRotationAngle(cube_r10, -0.3054F, 0.0F, 0.0F);
cube_r10.setTextureOffset(54, 144).addBox(-1.0F, -6.0F, -4.0F, 2.0F, 18.0F, 12.0F, 0.0F, false);
cube_r11 = new ModelRenderer(this);
cube_r11.setRotationPoint(2.0F, 9.25F, 34.0F);
Body.addChild(cube_r11);
setRotationAngle(cube_r11, 0.2528F, -0.1733F, 0.5888F);
cube_r11.setTextureOffset(135, 133).addBox(-0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, true);
cube_r12 = new ModelRenderer(this);
cube_r12.setRotationPoint(-2.0F, 9.25F, 34.0F);
Body.addChild(cube_r12);
setRotationAngle(cube_r12, 0.2528F, 0.1733F, -0.5888F);
cube_r12.setTextureOffset(135, 133).addBox(0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, false);
cube_r13 = new ModelRenderer(this);
cube_r13.setRotationPoint(0.0F, 9.25F, 33.0F);
Body.addChild(cube_r13);
setRotationAngle(cube_r13, 0.2618F, 0.0F, 0.0F);
cube_r13.setTextureOffset(106, 144).addBox(-2.0F, -6.0F, 0.0F, 4.0F, 6.0F, 21.0F, 0.0F, false);
cube_r14 = new ModelRenderer(this);
cube_r14.setRotationPoint(-5.0F, 9.0F, 20.0F);
Body.addChild(cube_r14);
setRotationAngle(cube_r14, 0.0F, 0.1745F, 0.0F);
cube_r14.setTextureOffset(38, 201).addBox(0.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, true);
cube_r15 = new ModelRenderer(this);
cube_r15.setRotationPoint(5.0F, 9.0F, 20.0F);
Body.addChild(cube_r15);
setRotationAngle(cube_r15, 0.0F, -0.1745F, 0.0F);
cube_r15.setTextureOffset(38, 201).addBox(-5.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, false);
cube_r16 = new ModelRenderer(this);
cube_r16.setRotationPoint(-7.0F, -11.0F, 20.0F);
Body.addChild(cube_r16);
setRotationAngle(cube_r16, 0.3925F, -1.2393F, 1.1581F);
cube_r16.setTextureOffset(196, 64).addBox(0.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, true);
cube_r17 = new ModelRenderer(this);
cube_r17.setRotationPoint(7.0F, -11.0F, 20.0F);
Body.addChild(cube_r17);
setRotationAngle(cube_r17, 0.3925F, 1.2393F, -1.1581F);
cube_r17.setTextureOffset(196, 64).addBox(-18.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, false);
cube_r18 = new ModelRenderer(this);
cube_r18.setRotationPoint(0.0F, -6.0F, 9.0F);
Body.addChild(cube_r18);
setRotationAngle(cube_r18, 0.0F, 0.0F, -1.5708F);
cube_r18.setTextureOffset(42, 182).addBox(-10.0F, -7.0F, 6.0F, 15.0F, 14.0F, 5.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 239).addBox(-15.0F, -7.0F, -28.0F, 15.0F, 14.0F, 0.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 223).addBox(-15.0F, -7.0F, -27.0F, 15.0F, 14.0F, 0.0F, 0.0F, false);
cube_r18.setTextureOffset(96, 55).addBox(-9.0F, -2.0F, -28.0F, 4.0F, 4.0F, 7.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 201).addBox(-14.0F, -7.0F, -26.0F, 14.0F, 14.0F, 5.0F, 0.0F, false);
cube_r18.setTextureOffset(144, 34).addBox(-16.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, false);
cube_r18.setTextureOffset(42, 0).addBox(0.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -18.0F, 0.0F, 14.0F, 25.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 0).addBox(1.0F, 0.0F, -26.0F, 15.0F, 0.0F, 66.0F, 0.0F, false);
cube_r18.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -21.0F, 11.0F, 14.0F, 10.0F, 0.0F, false);
cube_r18.setTextureOffset(54, 144).addBox(-10.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, false);
cube_r19 = new ModelRenderer(this);
cube_r19.setRotationPoint(0.0F, -6.0F, 9.0F);
Body.addChild(cube_r19);
setRotationAngle(cube_r19, 0.0F, 0.0F, 1.5708F);
cube_r19.setTextureOffset(144, 34).addBox(-2.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, true);
cube_r19.setTextureOffset(54, 144).addBox(0.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, true);
cube_r20 = new ModelRenderer(this);
cube_r20.setRotationPoint(0.0F, 36.0F, 9.0F);
Body.addChild(cube_r20);
setRotationAngle(cube_r20, 0.0F, 0.0F, 1.5708F);
cube_r20.setTextureOffset(42, 0).addBox(-28.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false);
cube_r21 = new ModelRenderer(this);
cube_r21.setRotationPoint(0.0F, -7.0F, -5.0F);
Body.addChild(cube_r21);
setRotationAngle(cube_r21, 0.0F, -0.4363F, -1.5708F);
cube_r21.setTextureOffset(0, 118).addBox(0.0F, -7.0F, 0.0F, 7.0F, 14.0F, 1.0F, 0.0F, false);
cube_r22 = new ModelRenderer(this);
cube_r22.setRotationPoint(8.0F, 4.0F, 5.5F);
Body.addChild(cube_r22);
setRotationAngle(cube_r22, 0.0F, 0.0F, 2.0944F);
cube_r22.setTextureOffset(162, 178).addBox(0.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, true);
cube_r23 = new ModelRenderer(this);
cube_r23.setRotationPoint(-8.0F, 4.0F, 5.5F);
Body.addChild(cube_r23);
setRotationAngle(cube_r23, 0.0F, 0.0F, -2.0944F);
cube_r23.setTextureOffset(162, 178).addBox(-6.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, false);
cube_r24 = new ModelRenderer(this);
cube_r24.setRotationPoint(5.0F, 9.0F, 20.0F);
Body.addChild(cube_r24);
setRotationAngle(cube_r24, 0.1515F, -0.0869F, -1.0538F);
cube_r24.setTextureOffset(0, 182).addBox(-0.1927F, -3.9414F, -0.5209F, 6.0F, 4.0F, 15.0F, 0.0F, false);
cube_r25 = new ModelRenderer(this);
cube_r25.setRotationPoint(-5.0F, 9.0F, 20.0F);
Body.addChild(cube_r25);
setRotationAngle(cube_r25, 0.1515F, 0.0869F, 1.0538F);
cube_r25.setTextureOffset(82, 118).addBox(-5.8073F, -4.9414F, -0.5209F, 6.0F, 5.0F, 15.0F, 0.0F, false);
cube_r26 = new ModelRenderer(this);
cube_r26.setRotationPoint(-8.0F, 0.5F, 20.0F);
Body.addChild(cube_r26);
setRotationAngle(cube_r26, 0.1745F, 0.0F, 1.5708F);
cube_r26.setTextureOffset(0, 144).addBox(-6.5F, -4.0F, 0.0F, 10.0F, 4.0F, 34.0F, 0.0F, true);
cube_r27 = new ModelRenderer(this);
cube_r27.setRotationPoint(8.0F, 0.5F, 20.0F);
Body.addChild(cube_r27);
setRotationAngle(cube_r27, 0.1745F, 0.0F, -1.5708F);
cube_r27.setTextureOffset(0, 144).addBox(-3.5F, -4.0F, 0.0F, 10.0F, 4.0F, 34.0F, 0.0F, false);
propeller = new ModelRenderer(this);
propeller.setRotationPoint(0.0F, 1.0F, -20.5F);
Body.addChild(propeller);
cube_r28 = new ModelRenderer(this);
cube_r28.setRotationPoint(0.0F, -7.0F, 29.5F);
propeller.addChild(cube_r28);
setRotationAngle(cube_r28, 0.0F, 0.0F, -1.5708F);
cube_r28.setTextureOffset(32, 0).addBox(-9.0F, -2.0F, -32.0F, 4.0F, 4.0F, 3.0F, 0.0F, false);
cube_r28.setTextureOffset(0, 260).addBox(-22.0F, -15.0F, -29.0F, 30.0F, 30.0F, 0.0F, 0.0F, false);
cube_r28.setTextureOffset(4, 0).addBox(-8.0F, -1.0F, -29.0F, 2.0F, 2.0F, 1.0F, 0.0F, false);
}
@Override
public void setRotationAngles(VehicleBaseEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){
Aeroplane aeroplane = (Aeroplane)entity;
aeroplane.GetAnimationManager().PropellerAnimation(propeller, aeroplane, AnimationAxis.Z_AXIS, false);
}
@Override
public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){
Body.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha);
}
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
}
@@ -1,4 +1,4 @@
package net.halbear.hvf.Example; package net.halbear.hvf.UsageExamples.Airboat;
import net.halbear.hvf.Entity.VehicleBaseEntity; import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.halbear.hvf.Util.Client.VehicleCameraPreset; import net.halbear.hvf.Util.Client.VehicleCameraPreset;
@@ -1,11 +1,10 @@
package net.halbear.hvf.Example.Renderer.Models; package net.halbear.hvf.UsageExamples.Airboat.Renderer;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder; import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.halbear.hvf.Entity.Renderer.AnimationAxis; import net.halbear.hvf.Entity.Renderer.AnimationAxis;
import net.halbear.hvf.Entity.VehicleBaseEntity; import net.halbear.hvf.Entity.VehicleBaseEntity;
import net.halbear.hvf.Example.Aeroplane; import net.halbear.hvf.UsageExamples.Airboat.Airboat;
import net.halbear.hvf.Example.Airboat;
import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.model.ModelRenderer; import net.minecraft.client.renderer.model.ModelRenderer;
@@ -1,7 +1,6 @@
package net.halbear.hvf.Example.Renderer; package net.halbear.hvf.UsageExamples.Airboat.Renderer;
import net.halbear.hvf.Entity.Renderer.VehicleBaseRenderer; import net.halbear.hvf.Entity.Renderer.VehicleBaseRenderer;
import net.halbear.hvf.Example.Renderer.Models.AirboatModel;
import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@@ -11,7 +11,7 @@ public class VehicleBuildInfo {
private Vector3d CentreOfMassOffset = new Vector3d(0,0,0); private Vector3d CentreOfMassOffset = new Vector3d(0,0,0);
private int EngineCount; private int EngineCount;
private EngineCategories EngineType; private EngineCategories EngineType;
private FuelType FuelType; private FuelType FuelType = net.halbear.hvf.Util.VehicleData.FuelType.Petrol;
private int GasCelCount; private int GasCelCount;
private float MaxSpeedMS; private float MaxSpeedMS;
private float MaxEngineRPM; private float MaxEngineRPM;