重写阔剑地雷,移除冗余文件
This commit is contained in:
parent
af6ff70613
commit
049ca60cfa
16 changed files with 91 additions and 617 deletions
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,12 +2,14 @@ package net.mcreator.superbwarfare.client.renderer.entity;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
import com.mojang.math.Axis;
|
||||||
import net.mcreator.superbwarfare.entity.ClaymoreEntity;
|
import net.mcreator.superbwarfare.entity.ClaymoreEntity;
|
||||||
import net.mcreator.superbwarfare.entity.model.ClaymoreModel;
|
import net.mcreator.superbwarfare.entity.model.ClaymoreModel;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
||||||
import software.bernie.geckolib.renderer.GeoEntityRenderer;
|
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);
|
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
|
@Override
|
||||||
protected float getDeathMaxRotation(ClaymoreEntity entityLivingBaseIn) {
|
protected float getDeathMaxRotation(ClaymoreEntity entityLivingBaseIn) {
|
||||||
return 0.0F;
|
return 0.0F;
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,74 +6,61 @@ import net.mcreator.superbwarfare.init.ModEntities;
|
||||||
import net.mcreator.superbwarfare.init.ModItems;
|
import net.mcreator.superbwarfare.init.ModItems;
|
||||||
import net.mcreator.superbwarfare.tools.CustomExplosion;
|
import net.mcreator.superbwarfare.tools.CustomExplosion;
|
||||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||||
import net.minecraft.network.syncher.EntityDataSerializers;
|
import net.minecraft.network.syncher.EntityDataSerializers;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
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.*;
|
||||||
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.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.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.item.SpawnEggItem;
|
|
||||||
import net.minecraft.world.level.Explosion;
|
import net.minecraft.world.level.Explosion;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.phys.AABB;
|
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.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.NetworkHooks;
|
||||||
import net.minecraftforge.network.PlayMessages;
|
import net.minecraftforge.network.PlayMessages;
|
||||||
import software.bernie.geckolib.animatable.GeoEntity;
|
import software.bernie.geckolib.animatable.GeoEntity;
|
||||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
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 software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
// TODO 重写阔剑地雷
|
public class ClaymoreEntity extends ThrowableItemProjectile implements GeoEntity, AnimatedEntity{
|
||||||
@Mod.EventBusSubscriber
|
|
||||||
public class ClaymoreEntity extends TamableAnimal implements GeoEntity, AnimatedEntity {
|
|
||||||
public static final EntityDataAccessor<Boolean> SHOOT = SynchedEntityData.defineId(ClaymoreEntity.class, EntityDataSerializers.BOOLEAN);
|
|
||||||
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(ClaymoreEntity.class, EntityDataSerializers.STRING);
|
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 String animationProcedure = "empty";
|
||||||
|
|
||||||
public ClaymoreEntity(PlayMessages.SpawnEntity packet, Level world) {
|
public ClaymoreEntity(EntityType<? extends ClaymoreEntity> type, Level world) {
|
||||||
this(ModEntities.CLAYMORE.get(), world);
|
super(type, world);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClaymoreEntity(EntityType<ClaymoreEntity> type, Level world) {
|
public ClaymoreEntity(EntityType<? extends ClaymoreEntity> type, LivingEntity entity, Level world) {
|
||||||
super(type, world);
|
super(type, entity, world);
|
||||||
xpReward = 0;
|
}
|
||||||
setNoAi(false);
|
|
||||||
setPersistenceRequired();
|
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
|
@Override
|
||||||
protected void defineSynchedData() {
|
protected void defineSynchedData() {
|
||||||
super.defineSynchedData();
|
this.entityData.define(ROT_Y, 0f);
|
||||||
this.entityData.define(SHOOT, false);
|
}
|
||||||
this.entityData.define(ANIMATION, "undefined");
|
|
||||||
|
public void setRotY(float rotY) {
|
||||||
|
this.entityData.set(ROT_Y, rotY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -82,130 +69,51 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected Item getDefaultItem() {
|
||||||
super.registerGoals();
|
return ModItems.CLAYMORE_MINE.get();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MobType getMobType() {
|
public boolean shouldRenderAtSqrDistance(double pDistance) {
|
||||||
return super.getMobType();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeWhenFarAway(double distanceToClosestPlayer) {
|
protected void onHit(HitResult result) {
|
||||||
return super.removeWhenFarAway(distanceToClosestPlayer);
|
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 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));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Z:
|
||||||
|
this.setDeltaMovement(this.getDeltaMovement().multiply(0.75, 0.75, -0.5));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hurt(DamageSource source, float amount) {
|
public void tick() {
|
||||||
if (source.is(DamageTypes.IN_FIRE))
|
super.tick();
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
|
||||||
var level = this.level();
|
var level = this.level();
|
||||||
var x = this.getX();
|
var x = this.getX();
|
||||||
var y = this.getY();
|
var y = this.getY();
|
||||||
|
@ -215,15 +123,11 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
|
||||||
if (!this.level().isClientSide()) this.discard();
|
if (!this.level().isClientSide()) this.discard();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.removeAllEffects();
|
if (this.tickCount >= 20) {
|
||||||
this.clearFire();
|
|
||||||
|
|
||||||
if (this.tickCount >= 40) {
|
|
||||||
final Vec3 center = new Vec3(x + 1.5 * this.getLookAngle().x, y + 1.5 * this.getLookAngle().y, z + 1.5 * this.getLookAngle().z);
|
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()) {
|
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
|
var condition = this.getOwner() != target
|
||||||
&& target instanceof LivingEntity
|
&& target instanceof LivingEntity
|
||||||
&& !(target instanceof ClaymoreEntity)
|
|
||||||
&& !(target instanceof TargetEntity)
|
&& !(target instanceof TargetEntity)
|
||||||
&& !(target instanceof Player player && (player.isCreative() || player.isSpectator()))
|
&& !(target instanceof Player player && (player.isCreative() || player.isSpectator()))
|
||||||
&& (!this.isAlliedTo(target) || target.getTeam() == null || target.getTeam().getName().equals("TDM"))
|
&& (!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) {
|
private void triggerExplode(Entity target) {
|
||||||
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
||||||
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 40f,
|
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 80f,
|
||||||
target.getX(), target.getY(), target.getZ(), 4f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
target.getX(), target.getY(), target.getZ(), 6f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||||
explosion.explode();
|
explosion.explode();
|
||||||
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
||||||
explosion.finalizeExplosion(false);
|
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
|
@Override
|
||||||
|
@ -276,77 +171,8 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AgeableMob getBreedOffspring(ServerLevel serverWorld, AgeableMob ageable) {
|
protected float getGravity() {
|
||||||
ClaymoreEntity retval = ModEntities.CLAYMORE.get().create(serverWorld);
|
return 0.07F;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSyncedAnimation() {
|
public String getSyncedAnimation() {
|
||||||
|
@ -364,39 +190,10 @@ public class ClaymoreEntity extends TamableAnimal implements GeoEntity, Animated
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
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
|
@Override
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||||
return this.cache;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -139,9 +139,6 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
|
||||||
explosion.finalizeExplosion(false);
|
explosion.finalizeExplosion(false);
|
||||||
|
|
||||||
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
|
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
|
||||||
for (int index0 = 0; index0 < 100; index0++) {
|
|
||||||
fragShoot();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void causeEntityHitExplode(Entity entity) {
|
private void causeEntityHitExplode(Entity entity) {
|
||||||
|
@ -154,15 +151,4 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
|
||||||
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
|
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
|
||||||
this.discard();
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class ModEntities {
|
||||||
EntityType.Builder.<SenpaiEntity>of(SenpaiEntity::new, MobCategory.MONSTER).setShouldReceiveVelocityUpdates(true).setTrackingRange(1024).setUpdateInterval(3).setCustomClientFactory(SenpaiEntity::new)
|
EntityType.Builder.<SenpaiEntity>of(SenpaiEntity::new, MobCategory.MONSTER).setShouldReceiveVelocityUpdates(true).setTrackingRange(1024).setUpdateInterval(3).setCustomClientFactory(SenpaiEntity::new)
|
||||||
.sized(0.6f, 2f));
|
.sized(0.6f, 2f));
|
||||||
public static final RegistryObject<EntityType<ClaymoreEntity>> CLAYMORE = register("claymore",
|
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",
|
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));
|
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",
|
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));
|
.setUpdateInterval(1).sized(0.5f, 0.5f));
|
||||||
public static final RegistryObject<EntityType<GunGrenadeEntity>> GUN_GRENADE = register("projectile_gun_grenade",
|
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));
|
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",
|
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));
|
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",
|
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(TARGET.get(), TargetEntity.createAttributes().build());
|
||||||
event.put(MORTAR.get(), MortarEntity.createAttributes().build());
|
event.put(MORTAR.get(), MortarEntity.createAttributes().build());
|
||||||
event.put(SENPAI.get(), SenpaiEntity.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(MK_42.get(), Mk42Entity.createAttributes().build());
|
||||||
event.put(DRONE.get(), DroneEntity.createAttributes().build());
|
event.put(DRONE.get(), DroneEntity.createAttributes().build());
|
||||||
event.put(MLE_1934.get(), Mle1934Entity.createAttributes().build());
|
event.put(MLE_1934.get(), Mle1934Entity.createAttributes().build());
|
||||||
|
|
|
@ -21,7 +21,6 @@ public class ModEntityRenderers {
|
||||||
event.registerEntityRenderer(ModEntities.CANNON_SHELL.get(), CannonShellRenderer::new);
|
event.registerEntityRenderer(ModEntities.CANNON_SHELL.get(), CannonShellRenderer::new);
|
||||||
event.registerEntityRenderer(ModEntities.BOCEK_ARROW.get(), BocekArrowRenderer::new);
|
event.registerEntityRenderer(ModEntities.BOCEK_ARROW.get(), BocekArrowRenderer::new);
|
||||||
event.registerEntityRenderer(ModEntities.PROJECTILE.get(), ProjectileEntityRenderer::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.MK_42.get(), Mk42Renderer::new);
|
||||||
event.registerEntityRenderer(ModEntities.DRONE.get(), DroneRenderer::new);
|
event.registerEntityRenderer(ModEntities.DRONE.get(), DroneRenderer::new);
|
||||||
event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new);
|
event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new);
|
||||||
|
|
|
@ -10,12 +10,10 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
public class ModModels {
|
public class ModModels {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
|
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
|
||||||
event.registerLayerDefinition(ModelBullet.LAYER_LOCATION, ModelBullet::createBodyLayer);
|
|
||||||
event.registerLayerDefinition(ModelMortarShell.LAYER_LOCATION, ModelMortarShell::createBodyLayer);
|
event.registerLayerDefinition(ModelMortarShell.LAYER_LOCATION, ModelMortarShell::createBodyLayer);
|
||||||
event.registerLayerDefinition(ModelTaserRod.LAYER_LOCATION, ModelTaserRod::createBodyLayer);
|
event.registerLayerDefinition(ModelTaserRod.LAYER_LOCATION, ModelTaserRod::createBodyLayer);
|
||||||
event.registerLayerDefinition(ModelGrenade.LAYER_LOCATION, ModelGrenade::createBodyLayer);
|
event.registerLayerDefinition(ModelGrenade.LAYER_LOCATION, ModelGrenade::createBodyLayer);
|
||||||
event.registerLayerDefinition(ModelBocekArrow.LAYER_LOCATION, ModelBocekArrow::createBodyLayer);
|
event.registerLayerDefinition(ModelBocekArrow.LAYER_LOCATION, ModelBocekArrow::createBodyLayer);
|
||||||
event.registerLayerDefinition(ModelClaymore.LAYER_LOCATION, ModelClaymore::createBodyLayer);
|
|
||||||
event.registerLayerDefinition(ModelHandGrenade.LAYER_LOCATION, ModelHandGrenade::createBodyLayer);
|
event.registerLayerDefinition(ModelHandGrenade.LAYER_LOCATION, ModelHandGrenade::createBodyLayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
package net.mcreator.superbwarfare.item;
|
package net.mcreator.superbwarfare.item;
|
||||||
|
|
||||||
import net.mcreator.superbwarfare.entity.ClaymoreEntity;
|
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.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResultHolder;
|
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.entity.player.Player;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
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) {
|
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||||
ItemStack stack = player.getItemInHand(hand);
|
ItemStack stack = player.getItemInHand(hand);
|
||||||
|
|
||||||
if (world instanceof ServerLevel serverLevel) {
|
ClaymoreEntity claymore = new ClaymoreEntity(player, world);
|
||||||
TamableAnimal entityToSpawn = new ClaymoreEntity(ModEntities.CLAYMORE.get(), serverLevel);
|
claymore.setPos(player.getX(), player.getEyeY() - 0.3, player.getZ());
|
||||||
entityToSpawn.moveTo(player.getX(), player.getY() + 1.1, player.getZ(), player.getYRot(), player.getXRot());
|
claymore.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, 0.2f,0);
|
||||||
entityToSpawn.setYBodyRot(player.getYRot());
|
claymore.setRotY(player.getYRot());
|
||||||
entityToSpawn.setYHeadRot(player.getYRot());
|
world.addFreshEntity(claymore);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(this, 20);
|
player.getCooldowns().addCooldown(this, 20);
|
||||||
stack.shrink(1);
|
stack.shrink(1);
|
||||||
|
|
|
@ -2,7 +2,6 @@ package net.mcreator.superbwarfare.tools;
|
||||||
|
|
||||||
import net.mcreator.superbwarfare.init.ModParticleTypes;
|
import net.mcreator.superbwarfare.init.ModParticleTypes;
|
||||||
import net.mcreator.superbwarfare.init.ModSounds;
|
import net.mcreator.superbwarfare.init.ModSounds;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.particles.ParticleOptions;
|
import net.minecraft.core.particles.ParticleOptions;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
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.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public class ParticleTool {
|
public class ParticleTool {
|
||||||
|
@ -48,16 +48,16 @@ public class ParticleTool {
|
||||||
|
|
||||||
if (level instanceof ServerLevel serverLevel) {
|
if (level instanceof ServerLevel serverLevel) {
|
||||||
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
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, 20, 1, 3, 1, 0.01, true);
|
||||||
sendParticle(serverLevel, ParticleTypes.CLOUD, x, y + 3, z, 150, 2, 1, 2, 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, 400, 1.5, 4, 1.5, 1, 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, 300, 3, 0.5, 3, 0.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.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.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, 80, 0.4, 1, 0.4, 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, 80, 2, 0.001, 2, 0.01, 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, 80, 0, 0, 0, 0.2, 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 |
|
@ -11,7 +11,7 @@
|
||||||
"item": "minecraft:gunpowder"
|
"item": "minecraft:gunpowder"
|
||||||
},
|
},
|
||||||
"b": {
|
"b": {
|
||||||
"item": "minecraft:netherrack"
|
"item": "minecraft:glowstone_dust"
|
||||||
},
|
},
|
||||||
"c": {
|
"c": {
|
||||||
"item": "minecraft:blaze_powder"
|
"item": "minecraft:blaze_powder"
|
||||||
|
|
Loading…
Add table
Reference in a new issue