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