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:
@@ -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;
|
||||||
|
|||||||
+6
-2
@@ -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){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-3
@@ -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;
|
||||||
+258
@@ -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
-1
@@ -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;
|
||||||
+2
-3
@@ -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
-2
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user