Setting up completely custom entities separate to MCreators workspace
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
|||||||
|
package studio.halbear.hem_custom.registry.EventHandlers;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||||
|
import net.minecraft.client.renderer.entity.MobRenderer;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.RegistryObject;
|
||||||
|
import net.minecraftforge.fml.client.registry.RenderingRegistry;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import studio.halbear.hem_custom.registry.ModEntities;
|
||||||
|
import studio.halbear.hem_custom.registry.ModStatics;
|
||||||
|
import studio.halbear.hem_custom.vehicles.Renderer.AeroplaneRenderer;
|
||||||
|
|
||||||
|
@Mod.EventBusSubscriber(modid = ModStatics.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||||
|
public class ClientEventHandler {
|
||||||
|
@SafeVarargs
|
||||||
|
public static void SetCollectionRenderType(RenderType type, RegistryObject<Block>... blocks_list) { //hal
|
||||||
|
for (RegistryObject<Block> blockRegistryObject : blocks_list) {
|
||||||
|
RenderTypeLookup.setRenderLayer(blockRegistryObject.get(), type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void init(final FMLClientSetupEvent event) {
|
||||||
|
RenderingRegistry.registerEntityRenderingHandler(ModEntities.AEROPLANE, AeroplaneRenderer::new);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package studio.halbear.hem_custom.registry;
|
||||||
|
|
||||||
|
import net.minecraft.entity.EntityClassification;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
|
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import studio.halbear.hem_custom.vehicles.Entity.Aeroplane;
|
||||||
|
|
||||||
|
|
||||||
|
@Mod.EventBusSubscriber(modid = "hem", bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||||
|
public class ModEntities {
|
||||||
|
|
||||||
|
public static final EntityType<Aeroplane> AEROPLANE = null;
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event) {
|
||||||
|
EntityType<Aeroplane> entity = EntityType.Builder.create(Aeroplane::new, EntityClassification.MISC)
|
||||||
|
.size(2, 1.5F).build(new ResourceLocation(ModStatics.MOD_ID, "aeroplane").toString());
|
||||||
|
entity.setRegistryName(new ResourceLocation(ModStatics.MOD_ID, "aeroplane"));
|
||||||
|
event.getRegistry().register(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerAttributes(final EntityAttributeCreationEvent event) {
|
||||||
|
//if an entity has attributes, register them here
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package studio.halbear.hem_custom.registry;
|
||||||
|
|
||||||
|
public class ModStatics {
|
||||||
|
public final static String MOD_ID = "hem";
|
||||||
|
}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
package studio.halbear.hem_custom.vehicles.Entity;
|
||||||
|
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.network.IPacket;
|
||||||
|
import net.minecraft.network.datasync.DataParameter;
|
||||||
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
|
import net.minecraft.network.datasync.EntityDataManager;
|
||||||
|
import net.minecraft.util.ActionResultType;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.math.vector.Vector3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.network.NetworkHooks;
|
||||||
|
|
||||||
|
public class Aeroplane extends Entity {
|
||||||
|
private static final DataParameter<Float> ORIENTATION_ROLL = EntityDataManager.createKey(Aeroplane.class, DataSerializers.FLOAT);
|
||||||
|
private static final DataParameter<Float> ORIENTATION_YAW = EntityDataManager.createKey(Aeroplane.class, DataSerializers.FLOAT);
|
||||||
|
private static final DataParameter<Float> ORIENTATION_PITCH = EntityDataManager.createKey(Aeroplane.class, DataSerializers.FLOAT);
|
||||||
|
|
||||||
|
private static final Vector3d[] VehicleSeatOffsets = new Vector3d[]{
|
||||||
|
new Vector3d(0.0D, -1D, 0.0D),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
public Aeroplane(EntityType<?> Type, World WorldIn) {
|
||||||
|
super(Type, WorldIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerData() {
|
||||||
|
this.dataManager.register(ORIENTATION_ROLL, 0F);
|
||||||
|
this.dataManager.register(ORIENTATION_PITCH, 0F);
|
||||||
|
this.dataManager.register(ORIENTATION_YAW, 0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readAdditional(CompoundNBT compoundNBT) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void writeAdditional(CompoundNBT compoundNBT) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPacket<?> createSpawnPacket() {
|
||||||
|
return NetworkHooks.getEntitySpawningPacket(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetVehicleRoll(float value){
|
||||||
|
this.dataManager.set(ORIENTATION_ROLL, value);
|
||||||
|
}
|
||||||
|
public void SetVehicleYaw(float value){
|
||||||
|
this.dataManager.set(ORIENTATION_YAW, value);
|
||||||
|
}
|
||||||
|
public void SetVehiclePitch(float value){
|
||||||
|
this.dataManager.set(ORIENTATION_PITCH, value);
|
||||||
|
}
|
||||||
|
public float GetVehicleRoll(){
|
||||||
|
return this.dataManager.get(ORIENTATION_ROLL);
|
||||||
|
}
|
||||||
|
public float GetVehicleYaw(){
|
||||||
|
return this.dataManager.get(ORIENTATION_YAW);
|
||||||
|
}
|
||||||
|
public float GetVehiclePitch(){
|
||||||
|
return this.dataManager.get(ORIENTATION_PITCH);
|
||||||
|
}
|
||||||
|
public float[] GetVehicleRotations(){
|
||||||
|
return new float[]{GetVehicleYaw(),GetVehiclePitch(),GetVehicleRoll()};
|
||||||
|
}
|
||||||
|
public void SetVehicleRotations(float Yaw, float Pitch, float Roll){
|
||||||
|
SetVehicleRoll(Roll);
|
||||||
|
SetVehicleYaw(Yaw);
|
||||||
|
SetVehiclePitch(Pitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canBeCollidedWith(){return true;}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean canFitPassenger(Entity passenger) {
|
||||||
|
return this.getPassengers().size() < VehicleSeatOffsets.length;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public ActionResultType processInitialInteract(PlayerEntity player, Hand hand) {
|
||||||
|
if (this.getPassengers().size() < VehicleSeatOffsets.length && !player.isPassenger()) {
|
||||||
|
if (!this.world.isRemote()) {
|
||||||
|
return player.startRiding(this) ? ActionResultType.CONSUME : ActionResultType.PASS;
|
||||||
|
}
|
||||||
|
return ActionResultType.func_233537_a_(this.world.isRemote());
|
||||||
|
}
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entity getControllingPassenger() {
|
||||||
|
return this.getPassengers().isEmpty() ? null : this.getPassengers().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePassenger(Entity passenger) {
|
||||||
|
if (this.isPassenger(passenger)) {
|
||||||
|
int seatIndex = this.getPassengers().indexOf(passenger);
|
||||||
|
|
||||||
|
if (seatIndex >= 0 && seatIndex < VehicleSeatOffsets.length) {
|
||||||
|
Vector3d localOffset = VehicleSeatOffsets[seatIndex];
|
||||||
|
Vector3d rotatedOffset = localOffset.rotateYaw((float) Math.toRadians(-this.rotationYaw));
|
||||||
|
passenger.setPosition(
|
||||||
|
this.getPosX() + rotatedOffset.x,
|
||||||
|
this.getPosY() + rotatedOffset.y + passenger.getMountedYOffset(),
|
||||||
|
this.getPosZ() + rotatedOffset.z
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
super.updatePassenger(passenger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package studio.halbear.hem_custom.vehicles.Renderer;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||||
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
import net.minecraft.client.renderer.culling.ClippingHelper;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||||
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.math.vector.Vector3f;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import studio.halbear.hem_custom.registry.ModStatics;
|
||||||
|
import studio.halbear.hem_custom.vehicles.Entity.Aeroplane;
|
||||||
|
import studio.halbear.hem_custom.vehicles.Renderer.Models.AeroplaneModel;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public class AeroplaneRenderer extends EntityRenderer<Aeroplane> {
|
||||||
|
private AeroplaneModel model = new AeroplaneModel();
|
||||||
|
|
||||||
|
public AeroplaneRenderer(EntityRendererManager renderManagerIn) {
|
||||||
|
super(renderManagerIn );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(Aeroplane entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) {
|
||||||
|
matrixStack.push();
|
||||||
|
|
||||||
|
matrixStack.rotate(Vector3f.YP.rotationDegrees(180.0F - entityYaw));
|
||||||
|
matrixStack.scale(-1.0F, -1.0F, 1.0F);
|
||||||
|
matrixStack.translate(0.0D, -1.5D, 0.0D);
|
||||||
|
|
||||||
|
IVertexBuilder vertexBuilder = buffer.getBuffer(this.model.getRenderType(getEntityTexture(entity)));
|
||||||
|
|
||||||
|
this.model.setRotationAngles(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F);
|
||||||
|
this.model.render(matrixStack, vertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
|
|
||||||
|
matrixStack.pop();
|
||||||
|
super.render(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public ResourceLocation getEntityTexture(Aeroplane entity) {
|
||||||
|
return new ResourceLocation(ModStatics.MOD_ID,"textures/entities/aeroplane.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @Override
|
||||||
|
public boolean shouldRender(Aeroplane livingEntity, ClippingHelper camera, double camX, double camY, double camZ) {
|
||||||
|
return true;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package studio.halbear.hem_custom.vehicles.Renderer.Models;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||||
|
import net.minecraft.client.renderer.entity.model.EntityModel;
|
||||||
|
import studio.halbear.hem_custom.vehicles.Entity.Aeroplane;
|
||||||
|
|
||||||
|
public class AeroplaneModel extends EntityModel<Aeroplane> {
|
||||||
|
@Override
|
||||||
|
public void setRotationAngles(Aeroplane aeroplane, float v, float v1, float v2, float v3, float v4) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(MatrixStack matrixStack, IVertexBuilder iVertexBuilder, int i, int i1, float v, float v1, float v2, float v3) {
|
||||||
|
|
||||||
|
}
|
||||||
|
//model to go here later
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user