some tomfoolery with rendering entities

This commit is contained in:
Halbear
2026-05-18 20:52:24 +01:00
parent d2c4776998
commit fd19391d21
8 changed files with 734 additions and 0 deletions
@@ -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.<CustomEntity>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<CustomEntity> 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));
}
}
}
@@ -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<Entity> {
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);
}
}
}
@@ -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<String, Object> 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<Entity> _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<Entity> compareDistOf(double _x, double _y, double _z) {
return Comparator.comparing((Function<Entity, Double>) (_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));
}
}
}
}
}
}
}
@@ -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<String, Object> 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);
}
}
@@ -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<String, Object> 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);
});
}
}
}
@@ -0,0 +1,3 @@
{
"parent": "item/template_spawn_egg"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB