diff --git a/src/main/java/studio/halbear/hem/entity/TestPlaneEntity.java b/src/main/java/studio/halbear/hem/entity/TestPlaneEntity.java new file mode 100644 index 0000000..1a5d0bc --- /dev/null +++ b/src/main/java/studio/halbear/hem/entity/TestPlaneEntity.java @@ -0,0 +1,178 @@ + +package studio.halbear.hem.entity; + +import studio.halbear.hem.procedures.TestPlaneRightClickedOnEntityProcedure; +import studio.halbear.hem.procedures.TestPlaneOnInitialEntitySpawnProcedure; +import studio.halbear.hem.procedures.TestPlaneOnEntityTickUpdateProcedure; +import studio.halbear.hem.entity.renderer.TestPlaneRenderer; +import studio.halbear.hem.HemModElements; + +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.fml.network.FMLPlayMessages; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; + +import net.minecraft.world.World; +import net.minecraft.world.IServerWorld; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Hand; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ActionResultType; +import net.minecraft.network.IPacket; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.SpawnEggItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.Item; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.ai.attributes.Attributes; +import net.minecraft.entity.ai.attributes.AttributeModifierMap; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.ILivingEntityData; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.Entity; +import net.minecraft.entity.CreatureEntity; +import net.minecraft.entity.CreatureAttribute; + +import javax.annotation.Nullable; + +import java.util.stream.Stream; +import java.util.Map; +import java.util.HashMap; +import java.util.AbstractMap; + +@HemModElements.ModElement.Tag +public class TestPlaneEntity extends HemModElements.ModElement { + public static EntityType entity = (EntityType.Builder.create(CustomEntity::new, EntityClassification.MONSTER) + .setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(CustomEntity::new).size(1f, 1.8f)) + .build("test_plane").setRegistryName("test_plane"); + + public TestPlaneEntity(HemModElements instance) { + super(instance, 311); + FMLJavaModLoadingContext.get().getModEventBus().register(new TestPlaneRenderer.ModelRegisterHandler()); + FMLJavaModLoadingContext.get().getModEventBus().register(new EntityAttributesRegisterHandler()); + } + + @Override + public void initElements() { + elements.entities.add(() -> entity); + elements.items + .add(() -> new SpawnEggItem(entity, -1, -1, new Item.Properties().group(ItemGroup.MISC)).setRegistryName("test_plane_spawn_egg")); + } + + @Override + public void init(FMLCommonSetupEvent event) { + } + + private static class EntityAttributesRegisterHandler { + @SubscribeEvent + public void onEntityAttributeCreation(EntityAttributeCreationEvent event) { + AttributeModifierMap.MutableAttribute ammma = MobEntity.func_233666_p_(); + ammma = ammma.createMutableAttribute(Attributes.MOVEMENT_SPEED, 1); + ammma = ammma.createMutableAttribute(Attributes.MAX_HEALTH, 10); + ammma = ammma.createMutableAttribute(Attributes.ARMOR, 0); + ammma = ammma.createMutableAttribute(Attributes.ATTACK_DAMAGE, 3); + ammma = ammma.createMutableAttribute(Attributes.FOLLOW_RANGE, 16); + event.put(entity, ammma.create()); + } + } + + public static class CustomEntity extends CreatureEntity { + public CustomEntity(FMLPlayMessages.SpawnEntity packet, World world) { + this(entity, world); + } + + public CustomEntity(EntityType type, World world) { + super(type, world); + experienceValue = 0; + setNoAI(false); + enablePersistence(); + } + + @Override + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + + } + + @Override + public CreatureAttribute getCreatureAttribute() { + return CreatureAttribute.UNDEFINED; + } + + @Override + public boolean canDespawn(double distanceToClosestPlayer) { + return false; + } + + @Override + public double getMountedYOffset() { + return super.getMountedYOffset() + -0.6; + } + + @Override + public net.minecraft.util.SoundEvent getHurtSound(DamageSource ds) { + return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.hurt")); + } + + @Override + public net.minecraft.util.SoundEvent getDeathSound() { + return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.death")); + } + + @Override + public ILivingEntityData onInitialSpawn(IServerWorld world, DifficultyInstance difficulty, SpawnReason reason, + @Nullable ILivingEntityData livingdata, @Nullable CompoundNBT tag) { + ILivingEntityData retval = super.onInitialSpawn(world, difficulty, reason, livingdata, tag); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + Entity entity = this; + + TestPlaneOnInitialEntitySpawnProcedure.executeProcedure(Stream.of(new AbstractMap.SimpleEntry<>("entity", entity)).collect(HashMap::new, + (_m, _e) -> _m.put(_e.getKey(), _e.getValue()), Map::putAll)); + return retval; + } + + @Override + public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) { + ItemStack itemstack = sourceentity.getHeldItem(hand); + ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote()); + super.func_230254_b_(sourceentity, hand); + sourceentity.startRiding(this); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + Entity entity = this; + + TestPlaneRightClickedOnEntityProcedure.executeProcedure(Stream.of(new AbstractMap.SimpleEntry<>("sourceentity", sourceentity)) + .collect(HashMap::new, (_m, _e) -> _m.put(_e.getKey(), _e.getValue()), Map::putAll)); + return retval; + } + + @Override + public void baseTick() { + super.baseTick(); + double x = this.getPosX(); + double y = this.getPosY(); + double z = this.getPosZ(); + Entity entity = this; + + TestPlaneOnEntityTickUpdateProcedure.executeProcedure(Stream + .of(new AbstractMap.SimpleEntry<>("world", world), new AbstractMap.SimpleEntry<>("x", x), new AbstractMap.SimpleEntry<>("y", y), + new AbstractMap.SimpleEntry<>("z", z), new AbstractMap.SimpleEntry<>("entity", entity)) + .collect(HashMap::new, (_m, _e) -> _m.put(_e.getKey(), _e.getValue()), Map::putAll)); + } + } +} diff --git a/src/main/java/studio/halbear/hem/entity/renderer/TestPlaneRenderer.java b/src/main/java/studio/halbear/hem/entity/renderer/TestPlaneRenderer.java new file mode 100644 index 0000000..569b0f8 --- /dev/null +++ b/src/main/java/studio/halbear/hem/entity/renderer/TestPlaneRenderer.java @@ -0,0 +1,359 @@ + +package studio.halbear.hem.entity.renderer; + +import studio.halbear.hem.entity.TestPlaneEntity; + +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.Entity; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; +import net.minecraft.client.renderer.entity.MobRenderer; + +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.matrix.MatrixStack; + +@OnlyIn(Dist.CLIENT) +public class TestPlaneRenderer { + public static class ModelRegisterHandler { + @SubscribeEvent + @OnlyIn(Dist.CLIENT) + public void registerModels(ModelRegistryEvent event) { + RenderingRegistry.registerEntityRenderingHandler(TestPlaneEntity.entity, renderManager -> { + return new MobRenderer(renderManager, new ModelUpdatedbiplane(), 0.5f) { + + @Override + public ResourceLocation getEntityTexture(Entity entity) { + return new ResourceLocation("hem:textures/entities/biplaneupdated.png"); + } + }; + }); + } + } + + // Made with Blockbench 5.1.4 + // Exported for Minecraft version 1.15 - 1.16 with MCP mappings + // Paste this class into your mod and generate all required imports + public static class ModelUpdatedbiplane extends EntityModel { + 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 cube_r28; + private final ModelRenderer cube_r29; + private final ModelRenderer cube_r30; + private final ModelRenderer cube_r31; + private final ModelRenderer cube_r32; + private final ModelRenderer cube_r33; + private final ModelRenderer cube_r34; + private final ModelRenderer cube_r35; + private final ModelRenderer cube_r36; + private final ModelRenderer cube_r37; + private final ModelRenderer cube_r38; + private final ModelRenderer cube_r39; + private final ModelRenderer cube_r40; + private final ModelRenderer cube_r41; + private final ModelRenderer propeller; + private final ModelRenderer cube_r42; + + public ModelUpdatedbiplane() { + 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(0, 92).addBox(-26.0F, -18.0F, -7.0F, 52.0F, 2.0F, 24.0F, 0.0F, false); + Body.setTextureOffset(0, 92).addBox(-26.0F, 5.0F, -2.0F, 52.0F, 2.0F, 24.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); + Body.setTextureOffset(292, 89).addBox(-13.0F, 13.0F, -4.0F, 2.0F, 8.0F, 8.0F, 0.0F, true); + Body.setTextureOffset(9, 207).addBox(-11.0F, 16.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, true); + 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(-2.0F, -12.0F, -1.0F, 2.0F, 12.0F, 2.0F, 0.0F, true); + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(9.0F, 18.0F, 0.0F); + Body.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.0F, -0.4363F); + cube_r2.setTextureOffset(10, 205).addBox(0.0F, -12.0F, -1.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(-42.0F, 4.0F, 7.0F); + Body.addChild(cube_r3); + setRotationAngle(cube_r3, 0.1745F, 0.1745F, 0.0F); + cube_r3.setTextureOffset(52, 21).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(-39.0F, 4.0F, 26.0F); + Body.addChild(cube_r4); + setRotationAngle(cube_r4, 0.1745F, 0.1745F, 0.0F); + cube_r4.setTextureOffset(100, 203).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(39.0F, 4.0F, 26.0F); + Body.addChild(cube_r5); + setRotationAngle(cube_r5, 0.1745F, -0.1745F, 0.0F); + cube_r5.setTextureOffset(186, 177).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(-11.0F, 4.5F, 21.0F); + Body.addChild(cube_r6); + setRotationAngle(cube_r6, 0.2659F, 0.008F, -0.0169F); + cube_r6.setTextureOffset(162, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(11.0F, 4.5F, 21.0F); + Body.addChild(cube_r7); + setRotationAngle(cube_r7, 0.2659F, -0.008F, 0.0169F); + cube_r7.setTextureOffset(170, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(-11.1935F, -5.629F, -1.7596F); + Body.addChild(cube_r8); + setRotationAngle(cube_r8, 0.2223F, 0.008F, -0.0169F); + cube_r8.setTextureOffset(52, 21).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(11.1935F, -5.629F, -1.7596F); + Body.addChild(cube_r9); + setRotationAngle(cube_r9, 0.2223F, -0.008F, 0.0169F); + cube_r9.setTextureOffset(178, 177).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(42.0F, 4.0F, 7.0F); + Body.addChild(cube_r10); + setRotationAngle(cube_r10, 0.1745F, -0.1745F, 0.0F); + cube_r10.setTextureOffset(206, 177).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(-26.0F, -18.0F, -7.0F); + Body.addChild(cube_r11); + setRotationAngle(cube_r11, 0.0F, 0.1309F, 0.0F); + cube_r11.setTextureOffset(0, 118).addBox(-29.0F, -0.01F, 0.0F, 29.0F, 2.0F, 24.0F, 0.0F, false); + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(26.0F, -18.0F, -7.0F); + Body.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, -0.1309F, 0.0F); + cube_r12.setTextureOffset(0, 118).addBox(0.0F, -0.01F, 0.0F, 29.0F, 2.0F, 24.0F, 0.0F, true); + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-26.0F, 5.0F, -2.0F); + Body.addChild(cube_r13); + setRotationAngle(cube_r13, 0.0F, 0.1309F, 0.0F); + cube_r13.setTextureOffset(64, 177).addBox(-19.0F, -0.01F, 0.0F, 19.0F, 2.0F, 24.0F, 0.0F, false); + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(26.0F, 5.0F, -2.0F); + Body.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, -0.1309F, 0.0F); + cube_r14.setTextureOffset(64, 177).addBox(0.0F, -0.01F, 0.0F, 19.0F, 2.0F, 24.0F, 0.0F, true); + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-26.8737F, -5.0F, 6.9632F); + Body.addChild(cube_r15); + setRotationAngle(cube_r15, 0.1686F, 0.6551F, -0.0096F); + cube_r15.setTextureOffset(190, 90).addBox(-19.5F, -12.0F, 1.0F, 39.0F, 24.0F, 0.0F, 0.0F, true); + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(-26.5867F, -6.1884F, 8.6681F); + Body.addChild(cube_r16); + setRotationAngle(cube_r16, 0.2164F, -0.4589F, -0.102F); + cube_r16.setTextureOffset(190, 90).addBox(-20.5F, -11.0F, 0.0F, 39.0F, 23.0F, 0.0F, 0.0F, true); + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(26.5867F, -6.1884F, 8.6681F); + Body.addChild(cube_r17); + setRotationAngle(cube_r17, 0.2164F, 0.4589F, 0.102F); + cube_r17.setTextureOffset(190, 90).addBox(-18.5F, -11.0F, 0.0F, 39.0F, 23.0F, 0.0F, 0.0F, false); + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(26.8737F, -5.0F, 6.9632F); + Body.addChild(cube_r18); + setRotationAngle(cube_r18, 0.1686F, -0.6551F, 0.0096F); + cube_r18.setTextureOffset(190, 90).addBox(-19.5F, -12.0F, 1.0F, 39.0F, 24.0F, 0.0F, 0.0F, false); + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, -1.5F, 0.0F); + Body.addChild(cube_r19); + setRotationAngle(cube_r19, -0.3491F, 0.0F, 0.0F); + cube_r19.setTextureOffset(0, 0).addBox(-0.5F, -2.5F, 1.0F, 1.0F, 9.0F, 1.0F, 0.0F, false); + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(10.0F, -3.0F, 52.0F); + Body.addChild(cube_r20); + setRotationAngle(cube_r20, -0.3054F, 0.0F, 1.5708F); + cube_r20.setTextureOffset(144, 0).addBox(-1.0F, -9.0F, -6.0F, 2.0F, 18.0F, 12.0F, 0.0F, true); + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(-10.0F, -3.0F, 52.0F); + Body.addChild(cube_r21); + setRotationAngle(cube_r21, -0.3054F, 0.0F, -1.5708F); + cube_r21.setTextureOffset(144, 0).addBox(-1.0F, -9.0F, -6.0F, 2.0F, 18.0F, 12.0F, 0.0F, false); + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(0.0F, -15.0F, 50.0F); + Body.addChild(cube_r22); + setRotationAngle(cube_r22, -0.3054F, 0.0F, 0.0F); + cube_r22.setTextureOffset(54, 144).addBox(-1.0F, -6.0F, -4.0F, 2.0F, 18.0F, 12.0F, 0.0F, false); + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(2.0F, 9.25F, 34.0F); + Body.addChild(cube_r23); + setRotationAngle(cube_r23, 0.2528F, -0.1733F, 0.5888F); + cube_r23.setTextureOffset(135, 133).addBox(-0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, true); + cube_r24 = new ModelRenderer(this); + cube_r24.setRotationPoint(-2.0F, 9.25F, 34.0F); + Body.addChild(cube_r24); + setRotationAngle(cube_r24, 0.2528F, 0.1733F, -0.5888F); + cube_r24.setTextureOffset(135, 133).addBox(0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, false); + cube_r25 = new ModelRenderer(this); + cube_r25.setRotationPoint(0.0F, 9.25F, 33.0F); + Body.addChild(cube_r25); + setRotationAngle(cube_r25, 0.2618F, 0.0F, 0.0F); + cube_r25.setTextureOffset(106, 144).addBox(-2.0F, -6.0F, 0.0F, 4.0F, 6.0F, 21.0F, 0.0F, false); + cube_r26 = new ModelRenderer(this); + cube_r26.setRotationPoint(-5.0F, 9.0F, 20.0F); + Body.addChild(cube_r26); + setRotationAngle(cube_r26, 0.0F, 0.1745F, 0.0F); + cube_r26.setTextureOffset(38, 201).addBox(0.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, true); + cube_r27 = new ModelRenderer(this); + cube_r27.setRotationPoint(5.0F, 9.0F, 20.0F); + Body.addChild(cube_r27); + setRotationAngle(cube_r27, 0.0F, -0.1745F, 0.0F); + cube_r27.setTextureOffset(38, 201).addBox(-5.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, false); + cube_r28 = new ModelRenderer(this); + cube_r28.setRotationPoint(-7.0F, -11.0F, 20.0F); + Body.addChild(cube_r28); + setRotationAngle(cube_r28, 0.3925F, -1.2393F, 1.1581F); + cube_r28.setTextureOffset(196, 64).addBox(0.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, true); + cube_r29 = new ModelRenderer(this); + cube_r29.setRotationPoint(7.0F, -11.0F, 20.0F); + Body.addChild(cube_r29); + setRotationAngle(cube_r29, 0.3925F, 1.2393F, -1.1581F); + cube_r29.setTextureOffset(196, 64).addBox(-18.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, false); + cube_r30 = new ModelRenderer(this); + cube_r30.setRotationPoint(0.0F, -6.0F, 9.0F); + Body.addChild(cube_r30); + setRotationAngle(cube_r30, 0.0F, 0.0F, -1.5708F); + cube_r30.setTextureOffset(42, 182).addBox(-10.0F, -7.0F, 6.0F, 15.0F, 14.0F, 5.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 239).addBox(-15.0F, -7.0F, -28.0F, 15.0F, 14.0F, 0.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 223).addBox(-15.0F, -7.0F, -27.0F, 15.0F, 14.0F, 0.0F, 0.0F, false); + cube_r30.setTextureOffset(96, 55).addBox(-9.0F, -2.0F, -28.0F, 4.0F, 4.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 201).addBox(-14.0F, -7.0F, -26.0F, 14.0F, 14.0F, 5.0F, 0.0F, false); + cube_r30.setTextureOffset(144, 34).addBox(-16.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(42, 0).addBox(0.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -18.0F, 0.0F, 14.0F, 25.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(1.0F, 0.0F, -26.0F, 15.0F, 0.0F, 66.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -21.0F, 11.0F, 14.0F, 10.0F, 0.0F, false); + cube_r30.setTextureOffset(54, 144).addBox(-10.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, false); + cube_r31 = new ModelRenderer(this); + cube_r31.setRotationPoint(0.0F, -6.0F, 9.0F); + Body.addChild(cube_r31); + setRotationAngle(cube_r31, 0.0F, 0.0F, 1.5708F); + cube_r31.setTextureOffset(144, 34).addBox(-2.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, true); + cube_r31.setTextureOffset(54, 144).addBox(0.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, true); + cube_r32 = new ModelRenderer(this); + cube_r32.setRotationPoint(0.0F, 36.0F, 9.0F); + Body.addChild(cube_r32); + setRotationAngle(cube_r32, 0.0F, 0.0F, 1.5708F); + cube_r32.setTextureOffset(42, 0).addBox(-28.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false); + cube_r33 = new ModelRenderer(this); + cube_r33.setRotationPoint(0.0F, -7.0F, -5.0F); + Body.addChild(cube_r33); + setRotationAngle(cube_r33, 0.0F, -0.4363F, -1.5708F); + cube_r33.setTextureOffset(0, 118).addBox(0.0F, -7.0F, 0.0F, 7.0F, 14.0F, 1.0F, 0.0F, false); + cube_r34 = new ModelRenderer(this); + cube_r34.setRotationPoint(51.0F, -18.5F, 20.0F); + Body.addChild(cube_r34); + setRotationAngle(cube_r34, 0.7342F, -0.1119F, -1.4365F); + cube_r34.setTextureOffset(53, 0).addBox(-24.5F, 0.0F, 0.0F, 24.0F, 0.0F, 43.0F, 0.0F, false); + cube_r35 = new ModelRenderer(this); + cube_r35.setRotationPoint(-51.0F, -18.5F, 20.0F); + Body.addChild(cube_r35); + setRotationAngle(cube_r35, 0.7342F, 0.1119F, 1.4365F); + cube_r35.setTextureOffset(53, 0).addBox(0.5F, 0.0F, 0.0F, 24.0F, 0.0F, 43.0F, 0.0F, true); + cube_r36 = new ModelRenderer(this); + cube_r36.setRotationPoint(8.0F, 4.0F, 5.5F); + Body.addChild(cube_r36); + setRotationAngle(cube_r36, 0.0F, 0.0F, 2.0944F); + cube_r36.setTextureOffset(162, 178).addBox(0.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, true); + cube_r37 = new ModelRenderer(this); + cube_r37.setRotationPoint(-8.0F, 4.0F, 5.5F); + Body.addChild(cube_r37); + setRotationAngle(cube_r37, 0.0F, 0.0F, -2.0944F); + cube_r37.setTextureOffset(162, 178).addBox(-6.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, false); + cube_r38 = new ModelRenderer(this); + cube_r38.setRotationPoint(5.0F, 9.0F, 20.0F); + Body.addChild(cube_r38); + setRotationAngle(cube_r38, 0.1515F, -0.0869F, -1.0538F); + cube_r38.setTextureOffset(0, 182).addBox(-0.1927F, -3.9414F, -0.5209F, 6.0F, 4.0F, 15.0F, 0.0F, false); + cube_r39 = new ModelRenderer(this); + cube_r39.setRotationPoint(-5.0F, 9.0F, 20.0F); + Body.addChild(cube_r39); + setRotationAngle(cube_r39, 0.1515F, 0.0869F, 1.0538F); + cube_r39.setTextureOffset(82, 118).addBox(-5.8073F, -4.9414F, -0.5209F, 6.0F, 5.0F, 15.0F, 0.0F, false); + cube_r40 = new ModelRenderer(this); + cube_r40.setRotationPoint(-8.0F, 0.5F, 20.0F); + Body.addChild(cube_r40); + setRotationAngle(cube_r40, 0.1745F, 0.0F, 1.5708F); + cube_r40.setTextureOffset(0, 144).addBox(-6.5F, -4.0F, 0.0F, 10.0F, 4.0F, 34.0F, 0.0F, true); + cube_r41 = new ModelRenderer(this); + cube_r41.setRotationPoint(8.0F, 0.5F, 20.0F); + Body.addChild(cube_r41); + setRotationAngle(cube_r41, 0.1745F, 0.0F, -1.5708F); + cube_r41.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_r42 = new ModelRenderer(this); + cube_r42.setRotationPoint(0.0F, -7.0F, 29.5F); + propeller.addChild(cube_r42); + setRotationAngle(cube_r42, 0.0F, 0.0F, -1.5708F); + cube_r42.setTextureOffset(32, 0).addBox(-9.0F, -2.0F, -32.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r42.setTextureOffset(0, 260).addBox(-22.0F, -15.0F, -29.0F, 30.0F, 30.0F, 0.0F, 0.0F, false); + cube_r42.setTextureOffset(4, 0).addBox(-8.0F, -1.0F, -29.0F, 2.0F, 2.0F, 1.0F, 0.0F, 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; + } + + public void setRotationAngles(Entity e, float f, float f1, float f2, float f3, float f4) { +float DegToRad = (float)(Math.PI/180.0); + float TargetRotX = (float)e.getPersistentData().getDouble("Pitch") * DegToRad; + float TargetRotY = (float)e.getPersistentData().getDouble("Yaw") * DegToRad; + float TargetRotZ = (float)e.getPersistentData().getDouble("Roll") * DegToRad; + + if(TargetRotX > Body.rotateAngleX) Body.rotateAngleX += 1* DegToRad; + if(TargetRotX < Body.rotateAngleX) Body.rotateAngleX -= 1* DegToRad; + if(TargetRotY > Body.rotateAngleY) Body.rotateAngleY += 1* DegToRad; + if(TargetRotY < Body.rotateAngleY) Body.rotateAngleY -= 1* DegToRad; + if(TargetRotZ> Body.rotateAngleZ) Body.rotateAngleZ += 1* DegToRad; + if(TargetRotZ < Body.rotateAngleZ) Body.rotateAngleZ -= 1* DegToRad; + + propeller.rotateAngleZ = (float)e.getPersistentData().getDouble("PropSpeed") * (float)(Math.PI/180.0); + } + } + +} diff --git a/src/main/java/studio/halbear/hem/procedures/TestPlaneOnEntityTickUpdateProcedure.java b/src/main/java/studio/halbear/hem/procedures/TestPlaneOnEntityTickUpdateProcedure.java new file mode 100644 index 0000000..d86e2c6 --- /dev/null +++ b/src/main/java/studio/halbear/hem/procedures/TestPlaneOnEntityTickUpdateProcedure.java @@ -0,0 +1,144 @@ +package studio.halbear.hem.procedures; + +import studio.halbear.hem.entity.TestPlaneEntity; +import studio.halbear.hem.HemModVariables; +import studio.halbear.hem.HemMod; + +import net.minecraft.world.IWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.Entity; +import net.minecraft.block.Blocks; + +import java.util.stream.Collectors; +import java.util.function.Function; +import java.util.Map; +import java.util.List; +import java.util.Comparator; + +public class TestPlaneOnEntityTickUpdateProcedure { + + public static void executeProcedure(Map dependencies) { + if (dependencies.get("world") == null) { + if (!dependencies.containsKey("world")) + HemMod.LOGGER.warn("Failed to load dependency world for procedure TestPlaneOnEntityTickUpdate!"); + return; + } + if (dependencies.get("x") == null) { + if (!dependencies.containsKey("x")) + HemMod.LOGGER.warn("Failed to load dependency x for procedure TestPlaneOnEntityTickUpdate!"); + return; + } + if (dependencies.get("y") == null) { + if (!dependencies.containsKey("y")) + HemMod.LOGGER.warn("Failed to load dependency y for procedure TestPlaneOnEntityTickUpdate!"); + return; + } + if (dependencies.get("z") == null) { + if (!dependencies.containsKey("z")) + HemMod.LOGGER.warn("Failed to load dependency z for procedure TestPlaneOnEntityTickUpdate!"); + return; + } + if (dependencies.get("entity") == null) { + if (!dependencies.containsKey("entity")) + HemMod.LOGGER.warn("Failed to load dependency entity for procedure TestPlaneOnEntityTickUpdate!"); + return; + } + IWorld world = (IWorld) dependencies.get("world"); + double x = dependencies.get("x") instanceof Integer ? (int) dependencies.get("x") : (double) dependencies.get("x"); + double y = dependencies.get("y") instanceof Integer ? (int) dependencies.get("y") : (double) dependencies.get("y"); + double z = dependencies.get("z") instanceof Integer ? (int) dependencies.get("z") : (double) dependencies.get("z"); + Entity entity = (Entity) dependencies.get("entity"); + entity.rotationYaw = (float) (0); + entity.setRenderYawOffset(entity.rotationYaw); + entity.prevRotationYaw = entity.rotationYaw; + if (entity instanceof LivingEntity) { + ((LivingEntity) entity).prevRenderYawOffset = entity.rotationYaw; + ((LivingEntity) entity).rotationYawHead = entity.rotationYaw; + ((LivingEntity) entity).prevRotationYawHead = entity.rotationYaw; + } + entity.rotationPitch = (float) (0); + entity.getPersistentData().putDouble("PropSpeed", ((entity.getPersistentData().getDouble("PropSpeed") + + Math.min(20 * (Math.abs(entity.getMotion().getZ()) + Math.abs(entity.getMotion().getX())), 20)) % 360)); + if (!((world.getBlockState(new BlockPos(x, y - 2, z))).getBlock() == Blocks.AIR)) { + entity.getPersistentData().putDouble("Pitch", + ((-20) * (1 - Math.min(2 * (Math.abs(entity.getMotion().getZ()) + Math.abs(entity.getMotion().getX())), 1)))); + } + if (0.3 > Math.abs(entity.getMotion().getZ()) + Math.abs(entity.getMotion().getX())) { + entity.setMotion( + (Math.sin(Math.toRadians(1 * entity.getPersistentData().getDouble("Yaw"))) + * (entity.getPersistentData().getDouble("Throttle") / 100)), + (entity.getMotion().getY()), (Math.cos(Math.toRadians(1 * entity.getPersistentData().getDouble("Yaw"))) + * (entity.getPersistentData().getDouble("Throttle") / 100))); + } else { + entity.setMotion( + (Math.cos(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Yaw"))) + * (entity.getPersistentData().getDouble("Throttle") / 100) + + Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.sin(Math.toRadians(1 * entity.getPersistentData().getDouble("Pitch"))) + * (entity.getPersistentData().getDouble("Throttle") / 100)), + (Math.cos(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Pitch"))) + * (entity.getPersistentData().getDouble("Throttle") / 100) + + Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Yaw"))) + * (entity.getPersistentData().getDouble("Throttle") / 100)), + (Math.cos(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.cos(Math.toRadians((-1) * entity.getPersistentData().getDouble("Yaw"))) + * (entity.getPersistentData().getDouble("Throttle") / 100) + + Math.sin(Math.toRadians((-1) * entity.getPersistentData().getDouble("Roll"))) + * Math.sin(Math.toRadians(1 * entity.getPersistentData().getDouble("Pitch"))) + * (entity.getPersistentData().getDouble("Throttle") / 100))); + } + if (entity.isBeingRidden()) { + { + List _entfound = world + .getEntitiesWithinAABB(Entity.class, + new AxisAlignedBB(x - (5 / 2d), y - (5 / 2d), z - (5 / 2d), x + (5 / 2d), y + (5 / 2d), z + (5 / 2d)), null) + .stream().sorted(new Object() { + Comparator compareDistOf(double _x, double _y, double _z) { + return Comparator.comparing((Function) (_entcnd -> _entcnd.getDistanceSq(_x, _y, _z))); + } + }.compareDistOf(x, y, z)).collect(Collectors.toList()); + for (Entity entityiterator : _entfound) { + if (entityiterator.isPassenger() && (entityiterator.getRidingEntity()) instanceof TestPlaneEntity.CustomEntity) { + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleIncreasePressure) { + entity.getPersistentData().putDouble("Throttle", Math.min(entity.getPersistentData().getDouble("Throttle") + 1, 100)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleReleasePressure) { + entity.getPersistentData().putDouble("Throttle", Math.max(entity.getPersistentData().getDouble("Throttle") - 1, 0)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleAccelerate) { + entity.getPersistentData().putDouble("Pitch", ((entity.getPersistentData().getDouble("Pitch") + 1) % 360)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleDecelerate) { + entity.getPersistentData().putDouble("Pitch", ((entity.getPersistentData().getDouble("Pitch") - 1) % 360)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleTurnLeft) { + entity.getPersistentData().putDouble("Roll", ((entity.getPersistentData().getDouble("Roll") - 1) % 360)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleTurnRight) { + entity.getPersistentData().putDouble("Roll", ((entity.getPersistentData().getDouble("Roll") + 1) % 360)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleStrafeLeft) { + entity.getPersistentData().putDouble("Yaw", ((entity.getPersistentData().getDouble("Yaw") - 1) % 360)); + } + if ((entityiterator.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new HemModVariables.PlayerVariables())).VehicleStrafeRight) { + entity.getPersistentData().putDouble("Yaw", ((entity.getPersistentData().getDouble("Yaw") + 1) % 360)); + } + } + } + } + } + } +} diff --git a/src/main/java/studio/halbear/hem/procedures/TestPlaneOnInitialEntitySpawnProcedure.java b/src/main/java/studio/halbear/hem/procedures/TestPlaneOnInitialEntitySpawnProcedure.java new file mode 100644 index 0000000..09d8ad5 --- /dev/null +++ b/src/main/java/studio/halbear/hem/procedures/TestPlaneOnInitialEntitySpawnProcedure.java @@ -0,0 +1,23 @@ +package studio.halbear.hem.procedures; + +import studio.halbear.hem.HemMod; + +import net.minecraft.entity.Entity; + +import java.util.Map; + +public class TestPlaneOnInitialEntitySpawnProcedure { + + public static void executeProcedure(Map dependencies) { + if (dependencies.get("entity") == null) { + if (!dependencies.containsKey("entity")) + HemMod.LOGGER.warn("Failed to load dependency entity for procedure TestPlaneOnInitialEntitySpawn!"); + return; + } + Entity entity = (Entity) dependencies.get("entity"); + entity.getPersistentData().putDouble("PropSpeed", 0); + entity.getPersistentData().putDouble("Pitch", 0); + entity.getPersistentData().putDouble("Yaw", 0); + entity.getPersistentData().putDouble("Roll", 0); + } +} diff --git a/src/main/java/studio/halbear/hem/procedures/TestPlaneRightClickedOnEntityProcedure.java b/src/main/java/studio/halbear/hem/procedures/TestPlaneRightClickedOnEntityProcedure.java new file mode 100644 index 0000000..e5bf271 --- /dev/null +++ b/src/main/java/studio/halbear/hem/procedures/TestPlaneRightClickedOnEntityProcedure.java @@ -0,0 +1,27 @@ +package studio.halbear.hem.procedures; + +import studio.halbear.hem.HemModVariables; +import studio.halbear.hem.HemMod; + +import net.minecraft.entity.Entity; + +import java.util.Map; + +public class TestPlaneRightClickedOnEntityProcedure { + + public static void executeProcedure(Map dependencies) { + if (dependencies.get("sourceentity") == null) { + if (!dependencies.containsKey("sourceentity")) + HemMod.LOGGER.warn("Failed to load dependency sourceentity for procedure TestPlaneRightClickedOnEntity!"); + return; + } + Entity sourceentity = (Entity) dependencies.get("sourceentity"); + { + boolean _setval = (true); + sourceentity.getCapability(HemModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.PilotingVehicle = _setval; + capability.syncPlayerVariables(sourceentity); + }); + } + } +} diff --git a/src/main/resources/assets/hem/models/item/test_plane_spawn_egg.json b/src/main/resources/assets/hem/models/item/test_plane_spawn_egg.json new file mode 100644 index 0000000..7a2c6da --- /dev/null +++ b/src/main/resources/assets/hem/models/item/test_plane_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/hem/textures/entities/biplane.png b/src/main/resources/assets/hem/textures/entities/biplane.png new file mode 100644 index 0000000..ec6d322 Binary files /dev/null and b/src/main/resources/assets/hem/textures/entities/biplane.png differ diff --git a/src/main/resources/assets/hem/textures/entities/biplaneupdated.png b/src/main/resources/assets/hem/textures/entities/biplaneupdated.png new file mode 100644 index 0000000..4881c99 Binary files /dev/null and b/src/main/resources/assets/hem/textures/entities/biplaneupdated.png differ