重写阔剑地雷,移除冗余文件

This commit is contained in:
Atsuihsio 2024-08-24 14:43:58 +08:00
parent af6ff70613
commit 049ca60cfa
16 changed files with 91 additions and 617 deletions

View file

@ -1,52 +0,0 @@
package net.mcreator.superbwarfare.client.model.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.ModUtils;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
// Made with Blockbench 4.9.4
// Exported for Minecraft version 1.17 or later with Mojang mappings
// Paste this class into your mod and generate all required imports
public class ModelBullet<T extends Entity> extends EntityModel<T> {
// This layer location should be baked with EntityRendererProvider.Context in
// the entity renderer and passed into this model's constructor
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(ModUtils.MODID, "modelbullet"), "main");
public final ModelPart bone;
public ModelBullet(ModelPart root) {
this.bone = root.getChild("bone");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition bone = partdefinition.addOrReplaceChild("bone", CubeListBuilder.create(), PartPose.offset(0.0F, 8.0F, 0.0F));
PartDefinition bone2 = bone.addOrReplaceChild("bone2", CubeListBuilder.create().texOffs(0, 0).addBox(-1.4142F, -92.5F, -1.2071F, 0.0F, 15.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.1213F, 8.5F, 0.0F));
PartDefinition cube_r1 = bone2.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(0, 0).addBox(-0.5F, 0.0F, -0.5F, 1.0F, 0.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.4142F, -92.1F, -0.7071F, 0.0F, 0.7854F, 0.0F));
PartDefinition cube_r2 = bone2.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(0, 0).addBox(0.0F, -7.5F, -0.5F, 0.0F, 15.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.4142F, -85.0F, -0.7071F, 0.0F, -2.0944F, 0.0F));
PartDefinition cube_r3 = bone2.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(0, 0).addBox(0.0F, -7.5F, -0.5F, 0.0F, 15.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.4142F, -85.0F, -0.7071F, 0.0F, -1.0472F, 0.0F));
return LayerDefinition.create(meshdefinition, 16, 16);
}
@Override
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
bone.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
}
}

View file

@ -1,56 +0,0 @@
package net.mcreator.superbwarfare.client.model.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.ModUtils;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
// Made with Blockbench 4.9.3
// Exported for Minecraft version 1.17 or later with Mojang mappings
// Paste this class into your mod and generate all required imports
public class ModelClaymore<T extends Entity> extends EntityModel<T> {
// This layer location should be baked with EntityRendererProvider.Context in
// the entity renderer and passed into this model's constructor
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(ModUtils.MODID, "modelclaymore"), "main");
public final ModelPart claymore;
public ModelClaymore(ModelPart root) {
this.claymore = root.getChild("claymore");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition claymore = partdefinition.addOrReplaceChild("claymore", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
PartDefinition bone = claymore.addOrReplaceChild("bone",
CubeListBuilder.create().texOffs(0, 0).addBox(-3.5F, -7.75F, -0.5F, 7.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)).texOffs(0, 14).addBox(-2.0F, -8.0F, 0.0F, 4.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).texOffs(14, 7)
.addBox(2.0F, -8.75F, 0.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)).texOffs(6, 7).addBox(-3.0F, -8.75F, 0.0F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 3.1416F, 0.0F));
PartDefinition cube_r1 = bone.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(8, 7).addBox(-1.5F, -6.0F, -0.5F, 2.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(4.3118F, -1.75F, -0.4598F, 0.0F, 0.3927F, 0.0F));
PartDefinition cube_r2 = bone.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(0, 7).addBox(0.5F, -6.0F, -1.5F, 2.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(-5.6184F, -1.75F, 0.0814F, 0.0F, -0.3927F, 0.0F));
PartDefinition cube_r3 = bone.addOrReplaceChild("cube_r3",
CubeListBuilder.create().texOffs(12, 13).addBox(0.0F, -0.75F, -0.5F, 0.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).texOffs(0, 15).addBox(6.0F, -0.75F, -0.5F, 0.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(-3.0F, -2.6F, 0.3F, -0.7854F, 0.0F, 0.0F));
PartDefinition cube_r4 = bone.addOrReplaceChild("cube_r4",
CubeListBuilder.create().texOffs(10, 13).addBox(0.0F, -0.5F, -0.25F, 0.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).texOffs(14, 13).addBox(6.0F, -0.5F, -0.25F, 0.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(-3.0F, -2.6F, 0.3F, 0.7854F, 0.0F, 0.0F));
return LayerDefinition.create(meshdefinition, 32, 32);
}
@Override
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
claymore.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
}
}

View file

@ -1,48 +0,0 @@
package net.mcreator.superbwarfare.client.model.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.ModUtils;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
// Made with Blockbench 4.9.2
// Exported for Minecraft version 1.17 or later with Mojang mappings
// Paste this class into your mod and generate all required imports
public class ModelMissile<T extends Entity> extends EntityModel<T> {
// This layer location should be baked with EntityRendererProvider.Context in
// the entity renderer and passed into this model's constructor
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(ModUtils.MODID, "modelmissile"), "main");
public final ModelPart bone;
public ModelMissile(ModelPart root) {
this.bone = root.getChild("bone");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition bone = partdefinition.addOrReplaceChild("bone",
CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -34.0F, -1.0F, 2.0F, 18.0F, 2.0F, new CubeDeformation(0.0F)).texOffs(8, 8).addBox(-0.5F, -21.0F, -2.0F, 1.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(14, 4)
.addBox(-0.5F, -32.0F, -2.0F, 1.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(8, 0).addBox(-0.5F, -36.0F, -0.5F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)),
PartPose.offset(0.0F, 24.0F, 0.0F));
PartDefinition cube_r1 = bone.addOrReplaceChild("cube_r1",
CubeListBuilder.create().texOffs(14, 12).addBox(-0.5F, -3.0F, -2.0F, 1.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(8, 0).addBox(-0.5F, 8.0F, -2.0F, 1.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)),
PartPose.offsetAndRotation(0.0F, -29.0F, 0.0F, 0.0F, -1.5708F, 0.0F));
return LayerDefinition.create(meshdefinition, 32, 32);
}
@Override
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
bone.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
}
}

View file

@ -2,12 +2,14 @@ package net.mcreator.superbwarfare.client.renderer.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import net.mcreator.superbwarfare.entity.ClaymoreEntity;
import net.mcreator.superbwarfare.entity.model.ClaymoreModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
@ -31,6 +33,14 @@ public class ClaymoreRenderer extends GeoEntityRenderer<ClaymoreEntity> {
super.preRender(poseStack, entity, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
}
@Override
public void render(ClaymoreEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
poseStack.pushPose();
poseStack.mulPose(Axis.YP.rotationDegrees(90 - Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()) - 90));
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
poseStack.popPose();
}
@Override
protected float getDeathMaxRotation(ClaymoreEntity entityLivingBaseIn) {
return 0.0F;

View file

@ -1,46 +0,0 @@
package net.mcreator.superbwarfare.client.renderer.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.model.entity.ModelBullet;
import net.mcreator.superbwarfare.entity.FragEntity;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
public class FragRenderer extends EntityRenderer<FragEntity> {
private static final ResourceLocation TEXTURE = new ResourceLocation(ModUtils.MODID, "textures/entity/bullet_tex.png");
private final ModelBullet<FragEntity> model;
public FragRenderer(EntityRendererProvider.Context context) {
super(context);
model = new ModelBullet<>(context.bakeLayer(ModelBullet.LAYER_LOCATION));
}
protected int getBlockLightLevel(FragEntity pEntity, BlockPos pPos) {
return 15;
}
@Override
public void render(FragEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
VertexConsumer vb = bufferIn.getBuffer(RenderType.eyes(this.getTextureLocation(entityIn)));
poseStack.pushPose();
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()) - 90));
poseStack.mulPose(Axis.ZP.rotationDegrees(90 + Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())));
model.renderToBuffer(poseStack, vb, packedLightIn, OverlayTexture.NO_OVERLAY, 1, 1, 1, 0.0625f);
poseStack.popPose();
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
}
@Override
public ResourceLocation getTextureLocation(FragEntity entity) {
return TEXTURE;
}
}

View file

@ -6,74 +6,61 @@ import net.mcreator.superbwarfare.init.ModEntities;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.tools.CustomExplosion;
import net.mcreator.superbwarfare.tools.ParticleTool;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.core.Direction;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.ThrownPotion;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PlayMessages;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Comparator;
// TODO 重写阔剑地雷
@Mod.EventBusSubscriber
public class ClaymoreEntity extends TamableAnimal implements GeoEntity, AnimatedEntity {
public static final EntityDataAccessor<Boolean> SHOOT = SynchedEntityData.defineId(ClaymoreEntity.class, EntityDataSerializers.BOOLEAN);
public class ClaymoreEntity extends ThrowableItemProjectile implements GeoEntity, AnimatedEntity{
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(ClaymoreEntity.class, EntityDataSerializers.STRING);
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public static final EntityDataAccessor<Float> ROT_Y = SynchedEntityData.defineId(ClaymoreEntity.class, EntityDataSerializers.FLOAT);
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public String animationProcedure = "empty";
public ClaymoreEntity(PlayMessages.SpawnEntity packet, Level world) {
this(ModEntities.CLAYMORE.get(), world);
public ClaymoreEntity(EntityType<? extends ClaymoreEntity> type, Level world) {
super(type, world);
}
public ClaymoreEntity(EntityType<ClaymoreEntity> type, Level world) {
super(type, world);
xpReward = 0;
setNoAi(false);
setPersistenceRequired();
public ClaymoreEntity(EntityType<? extends ClaymoreEntity> type, LivingEntity entity, Level world) {
super(type, entity, world);
}
public ClaymoreEntity(LivingEntity entity, Level level) {
super(ModEntities.CLAYMORE.get(), entity, level);
}
public ClaymoreEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
this(ModEntities.CLAYMORE.get(), level);
}
@Override
protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(SHOOT, false);
this.entityData.define(ANIMATION, "undefined");
this.entityData.define(ROT_Y, 0f);
}
public void setRotY(float rotY) {
this.entityData.set(ROT_Y, rotY);
}
@Override
@ -82,130 +69,51 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
}
@Override
protected void registerGoals() {
super.registerGoals();
protected Item getDefaultItem() {
return ModItems.CLAYMORE_MINE.get();
}
@Override
public MobType getMobType() {
return super.getMobType();
public boolean shouldRenderAtSqrDistance(double pDistance) {
return true;
}
@Override
public boolean removeWhenFarAway(double distanceToClosestPlayer) {
return super.removeWhenFarAway(distanceToClosestPlayer);
}
@Override
public boolean hurt(DamageSource source, float amount) {
if (source.is(DamageTypes.IN_FIRE))
return false;
if (source.getDirectEntity() instanceof ThrownPotion || source.getDirectEntity() instanceof AreaEffectCloud)
return false;
if (source.is(DamageTypes.FALL))
return false;
if (source.is(DamageTypes.CACTUS))
return false;
if (source.is(DamageTypes.DROWN))
return false;
if (source.is(DamageTypes.LIGHTNING_BOLT))
return false;
if (source.is(DamageTypes.EXPLOSION))
return false;
if (source.is(DamageTypes.DRAGON_BREATH))
return false;
if (source.is(DamageTypes.WITHER))
return false;
if (source.is(DamageTypes.WITHER_SKULL))
return false;
return super.hurt(source, amount);
}
@Override
public void die(DamageSource source) {
super.die(source);
if (level() instanceof ServerLevel) {
destoryExplode();
this.discard();
protected void onHit(HitResult result) {
switch (result.getType()) {
case BLOCK:
BlockHitResult blockResult = (BlockHitResult) result;
this.bounce(blockResult.getDirection());
break;
case ENTITY:
this.bounce(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite());
this.setDeltaMovement(this.getDeltaMovement().multiply(0.25, 1.0, 0.25));
break;
default:
break;
}
}
private void destoryExplode() {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 15f,
this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
}
@Override
public void addAdditionalSaveData(CompoundTag compound) {
super.addAdditionalSaveData(compound);
}
@Override
public void readAdditionalSaveData(CompoundTag compound) {
super.readAdditionalSaveData(compound);
}
@Override
public InteractionResult mobInteract(Player player, InteractionHand hand) {
ItemStack itemstack = player.getItemInHand(hand);
InteractionResult retval = InteractionResult.sidedSuccess(this.level().isClientSide());
Item item = itemstack.getItem();
if (itemstack.getItem() instanceof SpawnEggItem) {
retval = super.mobInteract(player, hand);
} else if (this.level().isClientSide()) {
retval = (this.isTame() && this.isOwnedBy(player) || this.isFood(itemstack)) ? InteractionResult.sidedSuccess(this.level().isClientSide()) : InteractionResult.PASS;
} else {
if (this.isTame()) {
if (this.isOwnedBy(player)) {
if (item.isEdible() && this.isFood(itemstack) && this.getHealth() < this.getMaxHealth()) {
this.usePlayerItem(player, hand, itemstack);
this.heal((float) item.getFoodProperties().getNutrition());
retval = InteractionResult.sidedSuccess(this.level().isClientSide());
} else if (this.isFood(itemstack) && this.getHealth() < this.getMaxHealth()) {
this.usePlayerItem(player, hand, itemstack);
this.heal(4);
retval = InteractionResult.sidedSuccess(this.level().isClientSide());
} else {
retval = super.mobInteract(player, hand);
}
private void bounce(Direction direction) {
switch (direction.getAxis()) {
case X:
this.setDeltaMovement(this.getDeltaMovement().multiply(-0.5, 0.75, 0.75));
break;
case Y:
this.setDeltaMovement(this.getDeltaMovement().multiply(0.75, -0.01, 0.75));
if (this.getDeltaMovement().y() < this.getGravity()) {
this.setDeltaMovement(this.getDeltaMovement().multiply(1, 0, 1));
}
} else if (this.isFood(itemstack)) {
this.usePlayerItem(player, hand, itemstack);
if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) {
this.tame(player);
this.level().broadcastEntityEvent(this, (byte) 7);
} else {
this.level().broadcastEntityEvent(this, (byte) 6);
}
this.setPersistenceRequired();
retval = InteractionResult.sidedSuccess(this.level().isClientSide());
} else {
retval = super.mobInteract(player, hand);
if (retval == InteractionResult.SUCCESS || retval == InteractionResult.CONSUME)
this.setPersistenceRequired();
}
break;
case Z:
this.setDeltaMovement(this.getDeltaMovement().multiply(0.75, 0.75, -0.5));
break;
}
if (this.isOwnedBy(player) && player.isShiftKeyDown()) {
if (!this.level().isClientSide()) this.discard();
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.CLAYMORE_MINE.get()));
}
return retval;
}
@Override
public void baseTick() {
super.baseTick();
var data = this.getPersistentData();
public void tick() {
super.tick();
var level = this.level();
var x = this.getX();
var y = this.getY();
@ -215,15 +123,11 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
if (!this.level().isClientSide()) this.discard();
}
this.removeAllEffects();
this.clearFire();
if (this.tickCount >= 40) {
if (this.tickCount >= 20) {
final Vec3 center = new Vec3(x + 1.5 * this.getLookAngle().x, y + 1.5 * this.getLookAngle().y, z + 1.5 * this.getLookAngle().z);
for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(2.5 / 2d), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) {
var condition = this.getOwner() != target
&& target instanceof LivingEntity
&& !(target instanceof ClaymoreEntity)
&& !(target instanceof TargetEntity)
&& !(target instanceof Player player && (player.isCreative() || player.isSpectator()))
&& (!this.isAlliedTo(target) || target.getTeam() == null || target.getTeam().getName().equals("TDM"))
@ -249,25 +153,16 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
private void triggerExplode(Entity target) {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 40f,
target.getX(), target.getY(), target.getZ(), 4f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 80f,
target.getX(), target.getY(), target.getZ(), 6f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
for (int index0 = 0; index0 < 250; index0++) {
fragShoot();
}
}
public void fragShoot() {
if (!this.level().isClientSide()) {
FragEntity frag = new FragEntity(this.getOwner(), level()).setPosition0(this.position());
frag.setPos(this.getX(), this.getEyeY() + 0.1, this.getZ());
frag.shoot(this.getLookAngle().x, this.getLookAngle().y + 0.5f, this.getLookAngle().z, 7,
60);
this.level().addFreshEntity(frag);
}
@Override
protected void updateRotation() {
this.setXRot(0);
this.setYRot(this.entityData.get(ROT_Y));
}
@Override
@ -276,77 +171,8 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
}
@Override
public AgeableMob getBreedOffspring(ServerLevel serverWorld, AgeableMob ageable) {
ClaymoreEntity retval = ModEntities.CLAYMORE.get().create(serverWorld);
if (retval != null) {
retval.finalizeSpawn(serverWorld, serverWorld.getCurrentDifficultyAt(retval.blockPosition()), MobSpawnType.BREEDING, null, null);
}
return retval;
}
@Override
public boolean isFood(ItemStack stack) {
return false;
}
@Override
public boolean isPushable() {
return false;
}
@Override
protected void doPush(Entity entityIn) {
}
@Override
protected void pushEntities() {
}
@Override
public void aiStep() {
super.aiStep();
this.updateSwingTime();
}
public static void init() {
}
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes()
.add(Attributes.MOVEMENT_SPEED, 0)
.add(Attributes.MAX_HEALTH, 20)
.add(Attributes.ARMOR, 0)
.add(Attributes.ATTACK_DAMAGE, 0)
.add(Attributes.FOLLOW_RANGE, 16)
.add(Attributes.KNOCKBACK_RESISTANCE, 1);
}
private PlayState movementPredicate(AnimationState<ClaymoreEntity> event) {
if (this.animationProcedure.equals("empty")) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.claymore.idle"));
}
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState<ClaymoreEntity> event) {
if (!animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
this.animationProcedure = "empty";
event.getController().forceAnimationReset();
}
} else if (animationProcedure.equals("empty")) {
return PlayState.STOP;
}
return PlayState.CONTINUE;
}
@Override
protected void tickDeath() {
++this.deathTime;
if (this.deathTime == 1) {
this.remove(ClaymoreEntity.RemovalReason.KILLED);
}
protected float getGravity() {
return 0.07F;
}
public String getSyncedAnimation() {
@ -364,39 +190,10 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
data.add(new AnimationController<>(this, "movement", 4, this::movementPredicate));
data.add(new AnimationController<>(this, "procedure", 4, this::procedurePredicate));
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
@SubscribeEvent
public static void onEntityAttacked(LivingAttackEvent event) {
var damagesource = event.getSource();
var entity = event.getEntity();
if (damagesource == null || entity == null) return;
var sourceentity = damagesource.getEntity();
if (sourceentity == null) return;
if (entity instanceof ClaymoreEntity tamEnt && tamEnt.getOwner() == sourceentity) {
if (tamEnt.getOwner() instanceof Player player && player.isCreative()) {
ClaymoreEntity claymore = (ClaymoreEntity) entity;
if (damagesource.is(ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("superbwarfare:deleted_mod_element")))) {
entity.setYRot(sourceentity.getYRot());
entity.setXRot(entity.getXRot());
entity.setYBodyRot(entity.getYRot());
entity.setYHeadRot(entity.getYRot());
entity.yRotO = entity.getYRot();
entity.xRotO = entity.getXRot();
claymore.yBodyRotO = claymore.getYRot();
claymore.yHeadRotO = claymore.getYRot();
}
event.setCanceled(true);
}
}
}
}

View file

@ -1,101 +0,0 @@
package net.mcreator.superbwarfare.entity;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.init.ModDamageTypes;
import net.mcreator.superbwarfare.init.ModEntities;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BellBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor;
import net.minecraftforge.network.PlayMessages;
public class FragEntity extends ThrowableItemProjectile {
private Vec3 position0;
public FragEntity(EntityType<? extends FragEntity> type, Level world) {
super(type, world);
}
public FragEntity(LivingEntity entity, Level level) {
super(ModEntities.FRAG.get(), entity, level);
}
public FragEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
this(ModEntities.FRAG.get(), level);
}
public FragEntity setPosition0(Vec3 position0) {
this.position0 = position0;
return this;
}
@Override
public Packet<ClientGamePacketListener> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override
protected Item getDefaultItem() {
return ModItems.GRENADE_40MM.get();
}
@Override
protected void onHitEntity(EntityHitResult result) {
Entity entity = result.getEntity();
if (entity instanceof LivingEntity) {
entity.invulnerableTime = 0;
}
if (this.getOwner() != null && this.getOwner() instanceof LivingEntity living) {
if (!living.level().isClientSide() && living instanceof ServerPlayer player) {
living.level().playSound(null, living.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1);
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
entity.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
5 - (float) Mth.clamp(0.1 * this.position0.distanceTo(entity.position())
* (entity instanceof LivingEntity livingEntity ? livingEntity.getMaxHealth() / 100 + 1 : 1), 0, 4.5));
}
}
this.discard();
}
@Override
public void onHitBlock(BlockHitResult blockHitResult) {
super.onHitBlock(blockHitResult);
BlockPos resultPos = blockHitResult.getBlockPos();
BlockState state = this.level().getBlockState(resultPos);
if (state.getBlock() instanceof BellBlock bell) {
bell.attemptToRing(this.level(), resultPos, blockHitResult.getDirection());
}
this.discard();
}
@Override
public void tick() {
super.tick();
if (this.tickCount > 4 || this.isInWater()) {
this.discard();
}
}
}

View file

@ -139,9 +139,6 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
for (int index0 = 0; index0 < 100; index0++) {
fragShoot();
}
}
private void causeEntityHitExplode(Entity entity) {
@ -154,15 +151,4 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
this.discard();
}
public void fragShoot() {
if (!this.level().isClientSide()) {
FragEntity frag = new FragEntity((LivingEntity) this.getOwner(), level()).setPosition0(this.position());
frag.setPos(this.getX(), this.getEyeY() + 0.1, this.getZ());
frag.shoot(this.getLookAngle().x, this.getLookAngle().y, this.getLookAngle().z, 5,
360);
this.level().addFreshEntity(frag);
}
}
}

View file

@ -25,7 +25,7 @@ public class ModEntities {
EntityType.Builder.<SenpaiEntity>of(SenpaiEntity::new, MobCategory.MONSTER).setShouldReceiveVelocityUpdates(true).setTrackingRange(1024).setUpdateInterval(3).setCustomClientFactory(SenpaiEntity::new)
.sized(0.6f, 2f));
public static final RegistryObject<EntityType<ClaymoreEntity>> CLAYMORE = register("claymore",
EntityType.Builder.<ClaymoreEntity>of(ClaymoreEntity::new, MobCategory.CREATURE).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(ClaymoreEntity::new).fireImmune().sized(0.5f, 0.5f));
EntityType.Builder.<ClaymoreEntity>of(ClaymoreEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(ClaymoreEntity::new).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<Mk42Entity>> MK_42 = register("mk_42",
EntityType.Builder.<Mk42Entity>of(Mk42Entity::new, MobCategory.CREATURE).setShouldReceiveVelocityUpdates(true).setTrackingRange(5124).setUpdateInterval(3).setCustomClientFactory(Mk42Entity::new).fireImmune().sized(3.4f, 3.5f));
public static final RegistryObject<EntityType<Mle1934Entity>> MLE_1934 = register("mle_1934",
@ -39,9 +39,6 @@ public class ModEntities {
.setUpdateInterval(1).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<GunGrenadeEntity>> GUN_GRENADE = register("projectile_gun_grenade",
EntityType.Builder.<GunGrenadeEntity>of(GunGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(GunGrenadeEntity::new).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<FragEntity>> FRAG = register("projectile_frag",
EntityType.Builder.<FragEntity>of(FragEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(FragEntity::new).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<RpgRocketEntity>> RPG_ROCKET = register("projectile_rpg_rocket",
EntityType.Builder.<RpgRocketEntity>of(RpgRocketEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(RpgRocketEntity::new).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<MortarShellEntity>> MORTAR_SHELL = register("projectile_mortar_shell",
@ -72,7 +69,6 @@ public class ModEntities {
event.put(TARGET.get(), TargetEntity.createAttributes().build());
event.put(MORTAR.get(), MortarEntity.createAttributes().build());
event.put(SENPAI.get(), SenpaiEntity.createAttributes().build());
event.put(CLAYMORE.get(), ClaymoreEntity.createAttributes().build());
event.put(MK_42.get(), Mk42Entity.createAttributes().build());
event.put(DRONE.get(), DroneEntity.createAttributes().build());
event.put(MLE_1934.get(), Mle1934Entity.createAttributes().build());

View file

@ -21,7 +21,6 @@ public class ModEntityRenderers {
event.registerEntityRenderer(ModEntities.CANNON_SHELL.get(), CannonShellRenderer::new);
event.registerEntityRenderer(ModEntities.BOCEK_ARROW.get(), BocekArrowRenderer::new);
event.registerEntityRenderer(ModEntities.PROJECTILE.get(), ProjectileEntityRenderer::new);
event.registerEntityRenderer(ModEntities.FRAG.get(), FragRenderer::new);
event.registerEntityRenderer(ModEntities.MK_42.get(), Mk42Renderer::new);
event.registerEntityRenderer(ModEntities.DRONE.get(), DroneRenderer::new);
event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new);

View file

@ -10,12 +10,10 @@ import net.minecraftforge.fml.common.Mod;
public class ModModels {
@SubscribeEvent
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(ModelBullet.LAYER_LOCATION, ModelBullet::createBodyLayer);
event.registerLayerDefinition(ModelMortarShell.LAYER_LOCATION, ModelMortarShell::createBodyLayer);
event.registerLayerDefinition(ModelTaserRod.LAYER_LOCATION, ModelTaserRod::createBodyLayer);
event.registerLayerDefinition(ModelGrenade.LAYER_LOCATION, ModelGrenade::createBodyLayer);
event.registerLayerDefinition(ModelBocekArrow.LAYER_LOCATION, ModelBocekArrow::createBodyLayer);
event.registerLayerDefinition(ModelClaymore.LAYER_LOCATION, ModelClaymore::createBodyLayer);
event.registerLayerDefinition(ModelHandGrenade.LAYER_LOCATION, ModelHandGrenade::createBodyLayer);
}
}

View file

@ -1,12 +1,8 @@
package net.mcreator.superbwarfare.item;
import net.mcreator.superbwarfare.entity.ClaymoreEntity;
import net.mcreator.superbwarfare.init.ModEntities;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.entity.TamableAnimal;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
@ -21,16 +17,11 @@ public class ClaymoreMine extends Item {
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
ItemStack stack = player.getItemInHand(hand);
if (world instanceof ServerLevel serverLevel) {
TamableAnimal entityToSpawn = new ClaymoreEntity(ModEntities.CLAYMORE.get(), serverLevel);
entityToSpawn.moveTo(player.getX(), player.getY() + 1.1, player.getZ(), player.getYRot(), player.getXRot());
entityToSpawn.setYBodyRot(player.getYRot());
entityToSpawn.setYHeadRot(player.getYRot());
entityToSpawn.setDeltaMovement((0.5 * player.getLookAngle().x), (0.5 * player.getLookAngle().y), (0.5 * player.getLookAngle().z));
entityToSpawn.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(entityToSpawn.blockPosition()), MobSpawnType.MOB_SUMMONED, null, null);
entityToSpawn.tame(player);
serverLevel.addFreshEntity(entityToSpawn);
}
ClaymoreEntity claymore = new ClaymoreEntity(player, world);
claymore.setPos(player.getX(), player.getEyeY() - 0.3, player.getZ());
claymore.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, 0.2f,0);
claymore.setRotY(player.getYRot());
world.addFreshEntity(claymore);
player.getCooldowns().addCooldown(this, 20);
stack.shrink(1);

View file

@ -2,7 +2,6 @@ package net.mcreator.superbwarfare.tools;
import net.mcreator.superbwarfare.init.ModParticleTypes;
import net.mcreator.superbwarfare.init.ModSounds;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
@ -10,6 +9,7 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.phys.Vec3;
public class ParticleTool {
@ -48,16 +48,16 @@ public class ParticleTool {
if (level instanceof ServerLevel serverLevel) {
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
sendParticle(serverLevel, ParticleTypes.CLOUD, x, y + 3, z, 100, 1, 3, 1, 0.01, true);
sendParticle(serverLevel, ParticleTypes.CLOUD, x, y + 3, z, 150, 2, 1, 2, 0.01, true);
sendParticle(serverLevel, ParticleTypes.FALLING_WATER, x, y + 3, z, 400, 1.5, 4, 1.5, 1, true);
sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, x, y, z, 300, 3, 0.5, 3, 0.1, true);
sendParticle(serverLevel, ParticleTypes.CLOUD, x, y + 3, z, 20, 1, 3, 1, 0.01, true);
sendParticle(serverLevel, ParticleTypes.CLOUD, x, y + 3, z, 30, 2, 1, 2, 0.01, true);
sendParticle(serverLevel, ParticleTypes.FALLING_WATER, x, y + 3, z, 50, 1.5, 4, 1.5, 1, true);
sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, x, y, z, 60, 3, 0.5, 3, 0.1, true);
}
sendParticle(serverLevel, ParticleTypes.EXPLOSION, x, y + 1, z, 5, 0.7, 0.7, 0.7, 1, true);
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 80, 0.4, 1, 0.4, 0.02, true);
sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, x, y + 1, z, 80, 0.4, 1, 0.4, 0.02, true);
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 80, 2, 0.001, 2, 0.01, true);
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), x, y, z, 80, 0, 0, 0, 0.2, true);
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 20, 0.2, 0.7, 0.2, 0.02, true);
sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, x, y + 1, z, 10, 0.4, 1, 0.4, 0.02, true);
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 20, 1, 0.001, 1, 0.01, true);
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), x, y, z, 30, 0, 0, 0, 0.2, true);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

View file

@ -11,7 +11,7 @@
"item": "minecraft:gunpowder"
},
"b": {
"item": "minecraft:netherrack"
"item": "minecraft:glowstone_dust"
},
"c": {
"item": "minecraft:blaze_powder"