From f69d83df6415bdfb5aa3f05257b55bf7d166b0d6 Mon Sep 17 00:00:00 2001 From: Halbear Date: Wed, 20 May 2026 21:42:41 +0100 Subject: [PATCH] fixing server side syncing --- .../halbear/hvf/Entity/Renderer/AxisType.java | 2 +- .../Renderer/VehicleAnimationManager.java | 126 +++++------------- .../Entity/Renderer/VehicleBaseRenderer.java | 4 + .../halbear/hvf/Entity/VehicleBaseEntity.java | 104 +++++++++------ .../net/halbear/hvf/Example/Aeroplane.java | 10 +- .../java/net/halbear/hvf/Example/Airboat.java | 8 +- .../Renderer/Models/AeroplaneModel.java | 6 +- .../Example/Renderer/Models/AirboatModel.java | 7 +- .../hvf/Registry/Input/ModKeybinds.java | 12 ++ .../PlayerBooleanProvider.java | 30 +++++ .../PlayerBooleanVariable.java | 18 +++ src/main/resources/META-INF/mods.toml | 10 +- src/main/resources/logo.png | Bin 0 -> 2636 bytes 13 files changed, 191 insertions(+), 146 deletions(-) create mode 100644 src/main/java/net/halbear/hvf/Registry/Input/ModKeybinds.java create mode 100644 src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanProvider.java create mode 100644 src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanVariable.java create mode 100644 src/main/resources/logo.png diff --git a/src/main/java/net/halbear/hvf/Entity/Renderer/AxisType.java b/src/main/java/net/halbear/hvf/Entity/Renderer/AxisType.java index 198c20c..06729f5 100644 --- a/src/main/java/net/halbear/hvf/Entity/Renderer/AxisType.java +++ b/src/main/java/net/halbear/hvf/Entity/Renderer/AxisType.java @@ -1,6 +1,6 @@ package net.halbear.hvf.Entity.Renderer; -public enum AnimationAxis { +public enum AxisType { MINECRAFT, EULER, CARTESIAN diff --git a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java index 2e8c154..2bf2581 100644 --- a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java +++ b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java @@ -1,38 +1,20 @@ package net.halbear.hvf.Entity.Renderer; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; import net.halbear.hvf.Entity.*; -import net.halbear.hvf.Halsvehicleframework; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.entity.model.EntityModel; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.vector.Vector3f; import net.minecraft.client.renderer.model.ModelRenderer; -import javax.annotation.Nonnull; -import java.util.Arrays; +import static net.halbear.hvf.Entity.Renderer.AnimationAxis.*; public class VehicleAnimationManager { public static float DegToRad = (float)Math.PI/180.0F; - public static ModelRenderer PropellerAnimation(ModelRenderer BoneIn, T entity, AnimationAxis axis, boolean invertAnimation){ - float TargetPropRotation = entity.GetFloatValue("TARGET_PROPELLER_ROTATION"); - float CurrentPropRotation = entity.GetFloatValue("PROPELLER_ROTATION"); - float CurrentPropRotationRadians = CurrentPropRotation * (invertAnimation ? -DegToRad : DegToRad); - float PropIncrementAmount = entity.GetFloatValue("PROPELLER_ROTATION_SPEED"); - boolean modifiedAngle = false; - if(TargetPropRotation < CurrentPropRotation){ - CurrentPropRotation = Math.max(CurrentPropRotation - PropIncrementAmount, TargetPropRotation) % 360; - modifiedAngle = true; - } - if(TargetPropRotation > CurrentPropRotation){ - CurrentPropRotation = modifiedAngle ? TargetPropRotation : Math.min(CurrentPropRotation + PropIncrementAmount,TargetPropRotation) % 360; - } - entity.SetFloatValue("PROPELLER_ROTATION",CurrentPropRotation); + public ModelRenderer PropellerAnimation(ModelRenderer BoneIn, T entity, AnimationAxis axis, boolean invertAnimation){ + float PartialTick = entity.GetPartialTick(); + float TargetPropRotation = entity.GetFloatDataValue("TARGET_PROPELLER_ROTATION"); + float CurrentPropRotation = entity.GetFloatDataValue("PROPELLER_ROTATION"); + float Addition = (TargetPropRotation - CurrentPropRotation) * PartialTick; + float CurrentPropRotationRadians = ((CurrentPropRotation + Addition)% 36000) * (invertAnimation ? -DegToRad : DegToRad); switch(axis){ case X_AXIS: BoneIn.rotateAngleX = CurrentPropRotationRadians; @@ -47,88 +29,52 @@ public class VehicleAnimationManager { return BoneIn; } - public static Vector3f ConvertCartesianToEuler(Vector3f VectorIn){ - Vector3f NewAxis = new Vector3f(VectorIn.z,VectorIn.y,VectorIn,x); - return NewAxis; - } - + public static Vector3f ConvertCartesianToEuler(Vector3f VectorIn){ return new Vector3f(VectorIn.getZ(),VectorIn.getY(),VectorIn.getX());} public static Vector3f ConvertEulerToCartesian(Vector3f VectorIn){ return ConvertCartesianToEuler(VectorIn); } - - public static Vector3f ConvertCartesianToMinecraft(Vector3f VectorIn){ - Vector3f NewAxis = new Vector3f(VectorIn.y,VectorIn.x,VectorIn,z); - return NewAxis; - } - - public static Vector3f ConvertMinecraftToCartesian(Vector3f VectorIn){ - return ConvertMinecraftToCartesian(VectorIn); - } - - - public static Vector3f ConvertMinecraftToEuler(Vector3f VectorIn){ - Vector3f NewAxis = new Vector3f(VectorIn.z,VectorIn.x,VectorIn,y); - return NewAxis; - } - - public static Vector3f ConvertEulerToMinecraft(Vector3f VectorIn){ - Vector3f NewAxis = new Vector3f(VectorIn.y,VectorIn.x,VectorIn.z); - return NewAxis; - } + public static Vector3f ConvertCartesianToMinecraft(Vector3f VectorIn){ return ConvertEulerToMinecraft(VectorIn);} + public static Vector3f ConvertMinecraftToCartesian(Vector3f VectorIn){return ConvertMinecraftToCartesian(VectorIn); } + public static Vector3f ConvertMinecraftToEuler(Vector3f VectorIn){return new Vector3f(VectorIn.getZ(),VectorIn.getX(),VectorIn.getY()); } + public static Vector3f ConvertEulerToMinecraft(Vector3f VectorIn){return new Vector3f(VectorIn.getY(),VectorIn.getX(),VectorIn.getZ());} + public static AnimationAxis ConvertCartesianToMinecraft(AnimationAxis axisIn){ return ConvertMinecraftToCartesian(axisIn);} public static AnimationAxis ConvertMinecraftToCartesian(AnimationAxis axisIn){ - switch(axis){ - case X_AXIS: + switch(axisIn){ + case X_AXIS : return Y_AXIS; - break; - case Y_AXIS: - return X_AXIS - break; - case Z_AXIS: - return Z_AXIS - break; + case Y_AXIS : + return X_AXIS; + case Z_AXIS : + return Z_AXIS; + default : + return null; } } public static AnimationAxis ConvertEulerToCartesian(AnimationAxis axisIn){ - switch(axis){ - case X_AXIS: + switch(axisIn){ + case X_AXIS : return Z_AXIS; - break; - case Y_AXIS: - return Y_AXIS - break; - case Z_AXIS: - return X_AXIS - break; - } - } - - public static AnimationAxis ConvertCartesianToMinecraft(AnimationAxis axisIn){ - switch(axis){ - case X_AXIS: + case Y_AXIS : return Y_AXIS; - break; - case Y_AXIS: - return X_AXIS - break; - case Z_AXIS: - return Z_AXIS - break; + case Z_AXIS : + return X_AXIS; + default : + return null; } } public static AnimationAxis ConvertCartesianToEuler(AnimationAxis axisIn){ - switch(axis){ - case X_AXIS: + switch(axisIn){ + case X_AXIS : return Z_AXIS; - break; - case Y_AXIS: - return Y_AXIS - break; - case Z_AXIS: - return X_AXIS - break; + case Y_AXIS : + return Y_AXIS; + case Z_AXIS : + return X_AXIS; + default : + return null; } } } diff --git a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleBaseRenderer.java b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleBaseRenderer.java index 0e3146c..9f1c53e 100644 --- a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleBaseRenderer.java +++ b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleBaseRenderer.java @@ -17,6 +17,9 @@ import java.util.Arrays; public class VehicleBaseRenderer> extends EntityRenderer { + private Vector3f LastRotations = new Vector3f(0,0,0); + + private M[] models; private final String TextureLocation; protected VehicleBaseRenderer(EntityRendererManager renderManager, M[] models, String TextureLocation) { @@ -29,6 +32,7 @@ public class VehicleBaseRenderer> VEHICLE_SYNCHED_FLOAT_PARAMETERS = new HashMap<>(); - private Map> VEHICLE_SYNCHED_INT_PARAMETERS = new HashMap<>(); - private Map> VEHICLE_SYNCHED_BOOLEAN_PARAMETERS = new HashMap<>(); + public static final DataParameter VEHICLE_SYNCHED_PARAMETERS = EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.COMPOUND_NBT); + private static final VehicleAnimationManager ANIMATION_MANAGER = new VehicleAnimationManager<>(); private Map BASE_FLOAT_PARAMETERS = new HashMap<>(); private Map BASE_INT_PARAMETERS = new HashMap<>(); - private Map BASE_BOOLEAN_PARAMETERS = new HashMap<>(); + private Map BASE_BOOL_PARAMETERS = new HashMap<>(); + private Map BASE_STRING_PARAMETERS = new HashMap<>(); private final VehicleClassification vehicleClassification; private final Vector3d[] VehicleSeatOffsets; + private float PartialTick = 1.0f; private EngineCategories EngineType; + public void SetPartialTick(float PartialTick){this.PartialTick = PartialTick;} + public float GetPartialTick(){return PartialTick;} + + public VehicleAnimationManager GetAnimationManager(){return ANIMATION_MANAGER;} + public Vector3d GetPilotSeat(){return VehicleSeatOffsets.length > 0 ? VehicleSeatOffsets[0] : new Vector3d(0,0,0);} public VehicleBaseEntity(EntityType entityTypeIn, World worldIn, Vector3d[] VehicleSeatOffsets, VehicleBuildInfo vehicleBuildInfo) { @@ -39,58 +47,72 @@ public class VehicleBaseEntity extends Entity { this.VehicleSeatOffsets = VehicleSeatOffsets; vehicleClassification = vehicleBuildInfo.GetVehicleClassification(); EngineType = vehicleBuildInfo.GetEngineType(); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("ORIENTATION_ROLL", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("ORIENTATION_ROLL",0f); float PropRotation = (float)(360 * Math.random()); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("PROPELLER_ROTATION", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION",PropRotation); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("TARGET_PROPELLER_ROTATION", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("TARGET_PROPELLER_ROTATION",PropRotation); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("PROPELLER_ROTATION_SPEED", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION_SPEED",0F); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("ORIENTATION_YAW", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); BASE_FLOAT_PARAMETERS.put("ORIENTATION_YAW",0f); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("ORIENTATION_PITCH", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); BASE_FLOAT_PARAMETERS.put("ORIENTATION_PITCH",0f); + BASE_FLOAT_PARAMETERS.put("ORIENTATION_ROLL",0f); + BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION",PropRotation); + BASE_FLOAT_PARAMETERS.put("TARGET_PROPELLER_ROTATION",PropRotation); + BASE_FLOAT_PARAMETERS.put("PROPELLER_ROTATION_SPEED",0F); + BASE_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM",(float)vehicleBuildInfo.GetMaxEngineRPM()); + BASE_INT_PARAMETERS.put("THROTTLE",0); + BASE_INT_PARAMETERS.put("YAW_CONTROL_INPUT",0); + BASE_INT_PARAMETERS.put("ROLL_CONTROL_INPUT",0); + BASE_INT_PARAMETERS.put("PITCH_CONTROL_INPUT",0); switch (vehicleClassification){ case Aeroplane: - VEHICLE_SYNCHED_INT_PARAMETERS.put("ENGINE_COUNT", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.VARINT)); BASE_INT_PARAMETERS.put("ENGINE_COUNT",(Integer) vehicleBuildInfo.GetEngineCount()); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM",(float)vehicleBuildInfo.GetMaxEngineRPM()); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("WING_SPAN", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("WING_SPAN",(float)vehicleBuildInfo.GetWingSpan()); + BASE_FLOAT_PARAMETERS.put("WING_SPAN",vehicleBuildInfo.GetWingSpan()); break; case Zepplin: - VEHICLE_SYNCHED_INT_PARAMETERS.put("ENGINE_COUNT", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.VARINT)); BASE_INT_PARAMETERS.put("ENGINE_COUNT",(Integer) vehicleBuildInfo.GetEngineCount()); - VEHICLE_SYNCHED_INT_PARAMETERS.put("GAS_CEL_COUNT", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.VARINT)); - BASE_INT_PARAMETERS.put("GAS_CEL_COUNT",(Integer)vehicleBuildInfo.GetGasCelCount()); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); - BASE_FLOAT_PARAMETERS.put("MAX_ENGINE_RPM",(float)vehicleBuildInfo.GetMaxEngineRPM()); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.put("GAS_CEL_CAPACITY", EntityDataManager.createKey(VehicleBaseEntity.class, DataSerializers.FLOAT)); BASE_FLOAT_PARAMETERS.put("GAS_CEL_CAPACITY",(float)vehicleBuildInfo.GetGasCelCapacity()); + BASE_FLOAT_PARAMETERS.put("GAS_CEL_COUNT",(float)vehicleBuildInfo.GetGasCelCount()); break; case Ship: break; } - VEHICLE_SYNCHED_INT_PARAMETERS.forEach((VariableName, VehicleParameters)->{ - this.dataManager.register(VehicleParameters, BASE_INT_PARAMETERS.get(VariableName)); - }); - VEHICLE_SYNCHED_FLOAT_PARAMETERS.forEach((VariableName, VehicleParameters)->{ - this.dataManager.register(VehicleParameters, BASE_FLOAT_PARAMETERS.get(VariableName)); - }); - VEHICLE_SYNCHED_BOOLEAN_PARAMETERS.forEach((VariableName, VehicleParameters)->{ - this.dataManager.register(VehicleParameters, BASE_BOOLEAN_PARAMETERS.get(VariableName)); - }); + + CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); + BASE_FLOAT_PARAMETERS.forEach(SyncedData::putFloat); + BASE_INT_PARAMETERS.forEach(SyncedData::putInt); + BASE_STRING_PARAMETERS.forEach(SyncedData::putString); + BASE_BOOL_PARAMETERS.forEach(SyncedData::putBoolean); + this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); } - public void SetIntDataValue(String ValueName, Integer Value){if(VEHICLE_SYNCHED_INT_PARAMETERS.containsKey(ValueName)) this.dataManager.set(VEHICLE_SYNCHED_INT_PARAMETERS.get(ValueName),Value);} - public Integer GetIntDataValue(String ValueName){return this.dataManager.get(VEHICLE_SYNCHED_INT_PARAMETERS.get(ValueName)); } - public void SetFloatDataValue(String ValueName, Float Value){if(VEHICLE_SYNCHED_FLOAT_PARAMETERS.containsKey(ValueName)) this.dataManager.set(VEHICLE_SYNCHED_FLOAT_PARAMETERS.get(ValueName),Value);} - public Float GetFloatDataValue(String ValueName){ return this.dataManager.get(VEHICLE_SYNCHED_FLOAT_PARAMETERS.get(ValueName));} - public void SetBooleanDataValue(String ValueName, Boolean Value){ if(VEHICLE_SYNCHED_BOOLEAN_PARAMETERS.containsKey(ValueName)) this.dataManager.set(VEHICLE_SYNCHED_BOOLEAN_PARAMETERS.get(ValueName),Value); } - public Boolean GetBooleanDataValue(String ValueName){ return this.dataManager.get(VEHICLE_SYNCHED_BOOLEAN_PARAMETERS.get(ValueName));} + public void SetIntDataValue(String ValueName, Integer Value){ + CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); + SyncedData.putInt(ValueName,Value); + this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); + } + public Integer GetIntDataValue(String ValueName){ + return this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).getInt(ValueName); + } + public void SetStringDataValue(String ValueName, String Value){ + CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); + SyncedData.putString(ValueName,Value); + this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); + } + public String GetStringDataValue(String ValueName){ + return this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).getString(ValueName); + } + public void SetFloatDataValue(String ValueName, Float Value){ + CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); + SyncedData.putFloat(ValueName,Value); + this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); + } + public Float GetFloatDataValue(String ValueName){ + return this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).getFloat(ValueName); + } + public void SetBooleanDataValue(String ValueName, Boolean Value){ + CompoundNBT SyncedData = this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).copy(); + SyncedData.putBoolean(ValueName,Value); + this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); + } + public Boolean GetBooleanDataValue(String ValueName){ + return this.dataManager.get(VEHICLE_SYNCHED_PARAMETERS).getBoolean(ValueName); + } public void SetVehicleRoll(float value){ SetFloatDataValue("ORIENTATION_ROLL",value); } @@ -110,7 +132,7 @@ public class VehicleBaseEntity extends Entity { @Override protected void registerData() { - + this.dataManager.register(VEHICLE_SYNCHED_PARAMETERS, new CompoundNBT()); } @Override diff --git a/src/main/java/net/halbear/hvf/Example/Aeroplane.java b/src/main/java/net/halbear/hvf/Example/Aeroplane.java index 9053b46..83dde0b 100644 --- a/src/main/java/net/halbear/hvf/Example/Aeroplane.java +++ b/src/main/java/net/halbear/hvf/Example/Aeroplane.java @@ -1,5 +1,6 @@ package net.halbear.hvf.Example; +import net.halbear.hvf.Entity.Renderer.VehicleAnimationManager; import net.halbear.hvf.Entity.VehicleBaseEntity; import net.halbear.hvf.Util.Client.VehicleCameraPreset; import net.halbear.hvf.Util.Client.VehicleCameraSettings; @@ -25,6 +26,7 @@ public class Aeroplane extends VehicleBaseEntity { VehicleCameraSettings.AddEntityCameraPreset(this.getType(), new VehicleCameraPreset(new Vector3f(0,0,4.5f), new Vector3f(0,0,0),70,60)); + SetFloatDataValue("PROPELLER_ROTATION_SPEED",(float)(Math.random() * 40)); } @Override @@ -34,7 +36,12 @@ public class Aeroplane extends VehicleBaseEntity { @Override public void ServerSideTickEvent(){ - + float CurrentPropRotation = GetFloatDataValue("TARGET_PROPELLER_ROTATION"); + float PropIncrementAmount = GetFloatDataValue("PROPELLER_ROTATION_SPEED"); + SetFloatDataValue("TARGET_PROPELLER_ROTATION",(CurrentPropRotation + PropIncrementAmount) % 36000); + SetFloatDataValue("ORIENTATION_ROLL",(GetFloatDataValue("ORIENTATION_ROLL") + (PropIncrementAmount < 10 ? (float)(Math.random()): -(float)(Math.random()))) % 360); + SetFloatDataValue("ORIENTATION_PITCH",(GetFloatDataValue("ORIENTATION_PITCH")+ (PropIncrementAmount < 10 ? (float)(Math.random()): -(float)(Math.random()))) % 360); + SetFloatDataValue("PROPELLER_ROTATION",CurrentPropRotation); } @Override @@ -43,3 +50,4 @@ public class Aeroplane extends VehicleBaseEntity { } } + diff --git a/src/main/java/net/halbear/hvf/Example/Airboat.java b/src/main/java/net/halbear/hvf/Example/Airboat.java index 73fc1c7..454bc9b 100644 --- a/src/main/java/net/halbear/hvf/Example/Airboat.java +++ b/src/main/java/net/halbear/hvf/Example/Airboat.java @@ -22,10 +22,11 @@ public class Airboat extends VehicleBaseEntity { .SetGasCelCapacity(1000); public Airboat(EntityType Type, World WorldIn) { - super(Type, WorldIn, new Vector3d[]{new Vector3d(0.0D, -1D, 0.0D)}, buildInfo); + super(Type, WorldIn, new Vector3d[]{new Vector3d(0.0D, -2D, 0.0D)}, buildInfo); VehicleCameraSettings.AddEntityCameraPreset(this.getType(), new VehicleCameraPreset(new Vector3f(0,4.0f, 16.0f), new Vector3f(0,0,0),70,65f)); + SetFloatDataValue("PROPELLER_ROTATION_SPEED",(float)(Math.random() * 40)); } @Override @@ -35,7 +36,10 @@ public class Airboat extends VehicleBaseEntity { @Override public void ServerSideTickEvent(){ - + float CurrentPropRotation = GetFloatDataValue("TARGET_PROPELLER_ROTATION"); + float PropIncrementAmount = GetFloatDataValue("PROPELLER_ROTATION_SPEED"); + SetFloatDataValue("TARGET_PROPELLER_ROTATION",(CurrentPropRotation + PropIncrementAmount) % 36000); + SetFloatDataValue("PROPELLER_ROTATION",CurrentPropRotation); } @Override diff --git a/src/main/java/net/halbear/hvf/Example/Renderer/Models/AeroplaneModel.java b/src/main/java/net/halbear/hvf/Example/Renderer/Models/AeroplaneModel.java index db9ab4f..7ad9f14 100644 --- a/src/main/java/net/halbear/hvf/Example/Renderer/Models/AeroplaneModel.java +++ b/src/main/java/net/halbear/hvf/Example/Renderer/Models/AeroplaneModel.java @@ -2,6 +2,8 @@ package net.halbear.hvf.Example.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.Entity.Renderer.VehicleAnimationManager; import net.halbear.hvf.Example.Aeroplane; import net.halbear.hvf.Entity.VehicleBaseEntity; import net.minecraft.client.renderer.entity.model.EntityModel; @@ -309,8 +311,6 @@ public class AeroplaneModel extends EntityModel { @Override public void setRotationAngles(VehicleBaseEntity entity, float f, float f1, float f2, float f3, float f4) { Aeroplane aeroplane = (Aeroplane)entity; - Body.rotateAngleY = (float)Math.toRadians((aeroplane.GetVehicleYaw()) ); - Body.rotateAngleX = (float)Math.toRadians((aeroplane.GetVehiclePitch())); - Body.rotateAngleZ = (float)Math.toRadians((aeroplane.GetVehicleRoll())); + aeroplane.GetAnimationManager().PropellerAnimation(propeller, aeroplane, AnimationAxis.Z_AXIS, false); } } diff --git a/src/main/java/net/halbear/hvf/Example/Renderer/Models/AirboatModel.java b/src/main/java/net/halbear/hvf/Example/Renderer/Models/AirboatModel.java index 69f0bd8..aa6d23d 100644 --- a/src/main/java/net/halbear/hvf/Example/Renderer/Models/AirboatModel.java +++ b/src/main/java/net/halbear/hvf/Example/Renderer/Models/AirboatModel.java @@ -2,7 +2,10 @@ package net.halbear.hvf.Example.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.Entity.VehicleBaseEntity; +import net.halbear.hvf.Example.Aeroplane; +import net.halbear.hvf.Example.Airboat; import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.model.ModelRenderer; @@ -3177,7 +3180,9 @@ public class AirboatModel extends EntityModel { @Override public void setRotationAngles(VehicleBaseEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){ - //previously the render function, render code was moved to a method below + Airboat airboat = (Airboat)entity; + airboat.GetAnimationManager().PropellerAnimation(Propeller, airboat, AnimationAxis.Z_AXIS, false); + airboat.GetAnimationManager().PropellerAnimation(Propeller2, airboat, AnimationAxis.Z_AXIS, true); } @Override diff --git a/src/main/java/net/halbear/hvf/Registry/Input/ModKeybinds.java b/src/main/java/net/halbear/hvf/Registry/Input/ModKeybinds.java new file mode 100644 index 0000000..ed260c8 --- /dev/null +++ b/src/main/java/net/halbear/hvf/Registry/Input/ModKeybinds.java @@ -0,0 +1,12 @@ +package net.halbear.hvf.Registry.Input; + +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.common.util.Lazy; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class ModKeybinds { + public static Lazy W_KEY_INPUT = Lazy.of(()->{ + return null; + }); + +} diff --git a/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanProvider.java b/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanProvider.java new file mode 100644 index 0000000..d2b4848 --- /dev/null +++ b/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanProvider.java @@ -0,0 +1,30 @@ +package net.halbear.hvf.Registry.PlayerVariables; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class PlayerBooleanProvider implements ICapabilitySerializable { + private final PlayerBooleanVariable VariableInstance = new PlayerBooleanVariable(); + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + return null; + } + + @Override + public CompoundNBT serializeNBT() { + return null; + } + + @Override + public void deserializeNBT(CompoundNBT nbt) { + + } +} diff --git a/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanVariable.java b/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanVariable.java new file mode 100644 index 0000000..08bc106 --- /dev/null +++ b/src/main/java/net/halbear/hvf/Registry/PlayerVariables/PlayerBooleanVariable.java @@ -0,0 +1,18 @@ +package net.halbear.hvf.Registry.PlayerVariables; + +public class PlayerBooleanVariable { + + private boolean bool = false; + + public boolean GetValue(){ + return bool; + } + + public void SetValue(boolean Value){ + bool = Value; + } + + public void sync(){ + + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 0e4ee91..0142274 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -9,7 +9,7 @@ modLoader = "javafml" #mandatory loaderVersion = "[36,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. -license = "${mod_license}" +license = "ARR" # A URL to refer people to when problems occur with this mod #issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional # A list of mods - how many allowed here is determined by the individual mod loader @@ -24,14 +24,10 @@ displayName = "Hals Vehicle Framework" #mandatory #updateJSONURL="https://change.me.example.invalid/updates.json" #optional # A URL for the "homepage" for this mod, displayed in the mod UI displayURL = "https://halbear.net/" #optional -# A file name (in the root of the mod JAR) containing a logo for display -#logoFile="hals_vehicle_framework.png" #optional -# A text field displayed in the mod UI -#credits="Thanks for this example mod goes to Java" #optional -# A text field displayed in the mod UI +logoFile="logo.png" authors = "halbear1" #optional # The description text for the mod (multi line!) (#mandatory) -description = '''${mod_description}''' +description = '''A complex and comprehensive vehicle framework''' # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. [[dependencies."hals_vehicle_framework"]] #optional # the modid of the dependency diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccac75a966f89c242dee78bcb7a976462a98f17 GIT binary patch literal 2636 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 aPu&Xq@{euL@`&ppP`a~h$M8qBNBkL} literal 0 HcmV?d00001