From 03eea2c2b210af55ffdea41289392a7037e2b363 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Mon, 30 Dec 2024 03:23:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AA=81=E5=88=BA=E7=88=86?= =?UTF-8?q?=E9=9B=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/atsuishio/superbwarfare/ModUtils.java | 1 + .../superbwarfare/client/ClickHandler.java | 5 +- .../client/model/item/LungeMineModel.java | 24 + .../renderer/item/LungeMineRenderer.java | 111 ++ .../superbwarfare/init/ModItems.java | 1 + .../superbwarfare/item/LungeMine.java | 201 ++++ .../superbwarfare/item/gun/GunItem.java | 2 +- .../message/LungeMineAttackMessage.java | 45 + .../superbwarfare/tools/SeekTool.java | 3 +- .../superbwarfare/tools/TraceTool.java | 4 +- .../animations/lunge_mine.animation.json | 86 ++ .../superbwarfare/geo/lunge_mine.geo.json | 1017 +++++++++++++++++ .../assets/superbwarfare/lang/en_us.json | 1 + .../assets/superbwarfare/lang/zh_cn.json | 1 + .../models/displaysettings/lunge_mine.json | 114 ++ .../superbwarfare/models/item/lunge_mine.json | 27 + .../models/item/lunge_mine_base.json | 6 + .../models/item/lunge_mine_icon.json | 6 + .../textures/item/lunge_mine.png | Bin 0 -> 1034 bytes .../textures/item/lunge_mine_icon.png | Bin 0 -> 559 bytes .../recipes/lunge_mine_crafting.json | 24 + 21 files changed, 1673 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/model/item/LungeMineModel.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/renderer/item/LungeMineRenderer.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/item/LungeMine.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java create mode 100644 src/main/resources/assets/superbwarfare/animations/lunge_mine.animation.json create mode 100644 src/main/resources/assets/superbwarfare/geo/lunge_mine.geo.json create mode 100644 src/main/resources/assets/superbwarfare/models/displaysettings/lunge_mine.json create mode 100644 src/main/resources/assets/superbwarfare/models/item/lunge_mine.json create mode 100644 src/main/resources/assets/superbwarfare/models/item/lunge_mine_base.json create mode 100644 src/main/resources/assets/superbwarfare/models/item/lunge_mine_icon.json create mode 100644 src/main/resources/assets/superbwarfare/textures/item/lunge_mine.png create mode 100644 src/main/resources/assets/superbwarfare/textures/item/lunge_mine_icon.png create mode 100644 src/main/resources/data/superbwarfare/recipes/lunge_mine_crafting.json diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index 436db1d56..441a38254 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -158,6 +158,7 @@ public class ModUtils { addNetworkMessage(ContainerDataMessage.class, ContainerDataMessage::encode, ContainerDataMessage::decode, ContainerDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(RadarChangeModeMessage.class, RadarChangeModeMessage::encode, RadarChangeModeMessage::decode, RadarChangeModeMessage::handler); addNetworkMessage(RadarSetParametersMessage.class, RadarSetParametersMessage::encode, RadarSetParametersMessage::decode, RadarSetParametersMessage::handler); + addNetworkMessage(LungeMineAttackMessage.class, LungeMineAttackMessage::encode, LungeMineAttackMessage::decode, LungeMineAttackMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 256fd69d3..242630bf1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -87,9 +87,12 @@ public class ClickHandler { int button = event.getButton(); - if (stack.is(ModTags.Items.GUN) || stack.is(ModItems.MONITOR.get()) || player.hasEffect(ModMobEffects.SHOCK.get()) + if (stack.is(ModTags.Items.GUN) || stack.is(ModItems.MONITOR.get()) || stack.is(ModItems.LUNGE_MINE.get()) || player.hasEffect(ModMobEffects.SHOCK.get()) || (player.getVehicle() instanceof IArmedVehicleEntity && !(player.getVehicle() instanceof WheelChairEntity))) { if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (stack.is(ModItems.LUNGE_MINE.get())) { + ModUtils.PACKET_HANDLER.sendToServer(new LungeMineAttackMessage(0)); + } event.setCanceled(true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/LungeMineModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/LungeMineModel.java new file mode 100644 index 000000000..575e5076c --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/LungeMineModel.java @@ -0,0 +1,24 @@ +package com.atsuishio.superbwarfare.client.model.item; + +import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.item.LungeMine; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class LungeMineModel extends GeoModel { + + @Override + public ResourceLocation getAnimationResource(LungeMine animatable) { + return ModUtils.loc("animations/lunge_mine.animation.json"); + } + + @Override + public ResourceLocation getModelResource(LungeMine animatable) { + return ModUtils.loc("geo/lunge_mine.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(LungeMine animatable) { + return ModUtils.loc("textures/item/lunge_mine.png"); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/LungeMineRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/LungeMineRenderer.java new file mode 100644 index 000000000..3e75de26b --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/LungeMineRenderer.java @@ -0,0 +1,111 @@ +package com.atsuishio.superbwarfare.client.renderer.item; + +import com.atsuishio.superbwarfare.client.AnimationHelper; +import com.atsuishio.superbwarfare.client.model.item.LungeMineModel; +import com.atsuishio.superbwarfare.item.LungeMine; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.player.PlayerRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.cache.object.GeoBone; +import software.bernie.geckolib.renderer.GeoItemRenderer; +import software.bernie.geckolib.util.RenderUtils; + +import java.util.HashSet; +import java.util.Set; + +public class LungeMineRenderer extends GeoItemRenderer { + + public LungeMineRenderer() { + super(new LungeMineModel()); + } + + @Override + public RenderType getRenderType(LungeMine animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } + + private static final float SCALE_RECIPROCAL = 1.0f / 16.0f; + protected boolean renderArms = false; + protected MultiBufferSource currentBuffer; + protected RenderType renderType; + public ItemDisplayContext transformType; + protected LungeMine animatable; + private final Set hiddenBones = new HashSet<>(); + + @Override + public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) { + this.transformType = transformType; + if (this.animatable != null) + this.animatable.getTransformType(transformType); + super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_); + } + + @Override + public void actuallyRender(PoseStack matrixStackIn, LungeMine animatable, BakedGeoModel model, RenderType type, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, boolean isRenderer, float partialTicks, int packedLightIn, + int packedOverlayIn, float red, float green, float blue, float alpha) { + this.currentBuffer = renderTypeBuffer; + this.renderType = type; + this.animatable = animatable; + super.actuallyRender(matrixStackIn, animatable, model, type, renderTypeBuffer, vertexBuilder, isRenderer, partialTicks, packedLightIn, packedOverlayIn, red, green, blue, alpha); + if (this.renderArms) { + this.renderArms = false; + } + } + + @Override + public void renderRecursively(PoseStack stack, LungeMine animatable, GeoBone bone, RenderType type, MultiBufferSource buffer, VertexConsumer bufferIn, boolean isReRender, float partialTick, int packedLightIn, int packedOverlayIn, float red, + float green, float blue, float alpha) { + Minecraft mc = Minecraft.getInstance(); + String name = bone.getName(); + boolean renderingArms = false; + if (name.equals("Lefthand")) { + bone.setHidden(true); + renderingArms = true; + } else { + bone.setHidden(this.hiddenBones.contains(name)); + } + + if (this.transformType.firstPerson() && renderingArms) { + AbstractClientPlayer localPlayer = mc.player; + + if (localPlayer == null) { + return; + } + + PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(localPlayer); + PlayerModel model = playerRenderer.getModel(); + stack.pushPose(); + RenderUtils.translateMatrixToBone(stack, bone); + RenderUtils.translateToPivotPoint(stack, bone); + RenderUtils.rotateMatrixAroundBone(stack, bone); + RenderUtils.scaleMatrixForBone(stack, bone); + RenderUtils.translateAwayFromPivotPoint(stack, bone); + ResourceLocation loc = localPlayer.getSkinTextureLocation(); + VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc)); + VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)); + stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f); + AnimationHelper.renderPartOverBone(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); + AnimationHelper.renderPartOverBone(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); + + this.currentBuffer.getBuffer(this.renderType); + stack.popPose(); + } + super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, red, green, blue, alpha); + } + + @Override + public ResourceLocation getTextureLocation(LungeMine instance) { + return super.getTextureLocation(instance); + } +} + diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index e26c06da4..8c5fb57bd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -99,6 +99,7 @@ public class ModItems { public static final RegistryObject JAVELIN_MISSILE = AMMO.register("javelin_missile", () -> new Item(new Item.Properties())); public static final RegistryObject MORTAR_SHELLS = AMMO.register("mortar_shells", () -> new Item(new Item.Properties())); public static final RegistryObject ROCKET = AMMO.register("rocket", Rocket::new); + public static final RegistryObject LUNGE_MINE = AMMO.register("lunge_mine", LungeMine::new); public static final RegistryObject HE_5_INCHES = AMMO.register("he_5_inches", He5Inches::new); public static final RegistryObject AP_5_INCHES = AMMO.register("ap_5_inches", Ap5Inches::new); public static final RegistryObject HAND_GRENADE = AMMO.register("hand_grenade", HandGrenade::new); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/LungeMine.java b/src/main/java/com/atsuishio/superbwarfare/item/LungeMine.java new file mode 100644 index 000000000..3f27234b3 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/item/LungeMine.java @@ -0,0 +1,201 @@ +package com.atsuishio.superbwarfare.item; + +import com.atsuishio.superbwarfare.client.renderer.item.LungeMineRenderer; +import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig; +import com.atsuishio.superbwarfare.init.ModDamageTypes; +import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.tools.CustomExplosion; +import com.atsuishio.superbwarfare.tools.ParticleTool; +import com.atsuishio.superbwarfare.tools.TraceTool; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Explosion; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; +import software.bernie.geckolib.animatable.GeoItem; +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.function.Consumer; + +public class LungeMine extends Item implements GeoItem, AnimatedItem { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + public static ItemDisplayContext transformType; + + public LungeMine() { + super(new Properties().stacksTo(1)); + } + + @Override + public void initializeClient(Consumer consumer) { + super.initializeClient(consumer); + consumer.accept(new IClientItemExtensions() { + private final BlockEntityWithoutLevelRenderer renderer = new LungeMineRenderer(); + + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return renderer; + } + + private static final HumanoidModel.ArmPose LungeMinePose = HumanoidModel.ArmPose.create("LungeMine", false, (model, entity, arm) -> { + if (arm != HumanoidArm.LEFT) { + model.rightArm.xRot = -22.5f * Mth.DEG_TO_RAD + model.head.xRot; + model.rightArm.yRot = -10f * Mth.DEG_TO_RAD; + model.leftArm.xRot = -55f * Mth.DEG_TO_RAD + model.head.xRot; + model.leftArm.yRot = 50f * Mth.DEG_TO_RAD; + } + }); + + @Override + public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack itemStack) { + if (!itemStack.isEmpty()) { + if (entityLiving.getUsedItemHand() == hand) { + return LungeMinePose; + } + } + return HumanoidModel.ArmPose.EMPTY; + } + }); + } + + public static void attack(ItemStack stack, Player player) { + if (stack.getOrCreateTag().getInt("AttackTime") == 0) { + stack.getOrCreateTag().putInt("AttackTime" , 6); + player.getCooldowns().addCooldown(stack.getItem(), 6); + player.level().playSound(null, player.getOnPos(), SoundEvents.PLAYER_ATTACK_SWEEP, SoundSource.PLAYERS, 1, 1); + } + + } + + public void getTransformType(ItemDisplayContext type) { + transformType = type; + } + + private PlayState idlePredicate(AnimationState event) { + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) return PlayState.STOP; + ItemStack stack = player.getMainHandItem(); + if (stack.is(ModItems.LUNGE_MINE.get())) { + if (stack.getOrCreateTag().getInt("AttackTime") > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.lunge_mine.fire")); + } + } + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.lunge_mine.idle")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + var idleController = new AnimationController<>(this, "idleController", 0, this::idlePredicate); + data.add(idleController); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } + + @Override + public void setAnimationProcedure(String procedure) { + } + + @Override + public boolean onEntitySwing(ItemStack stack, LivingEntity entity) { + return false; + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + return false; + } + + @Override + public boolean canAttackBlock(BlockState p_41441_, Level p_41442_, BlockPos p_41443_, Player p_41444_) { + return false; + } + + @Override + public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) { + super.inventoryTick(itemstack, world, entity, slot, selected); + + if (itemstack.getOrCreateTag().getInt("AttackTime") ==3) { + if (selected && entity.level() instanceof ServerLevel) { + boolean lookAtEntity = false; + + Entity lookingEntity = TraceTool.findLookingEntity(entity,4.5); + + HitResult result = entity.level().clip(new ClipContext(entity.getEyePosition(), entity.getEyePosition().add(entity.getLookAngle().scale(4.5)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)); + + Vec3 looking = Vec3.atLowerCornerOf(entity.level().clip(new ClipContext(entity.getEyePosition(), entity.getEyePosition().add(entity.getLookAngle().scale(4)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getBlockPos()); + BlockState blockState = entity.level().getBlockState(BlockPos.containing(looking.x(), looking.y(), looking.z())); + + Vec3 hitPos = result.getLocation(); + + if (lookingEntity != null) { + lookAtEntity = true; + } + +// if (entity instanceof Player player) { +// player.displayClientMessage(Component.literal("" + lookAtEntity), true); +// } + + if (lookAtEntity) { + if (entity instanceof Player player && !player.isCreative()) { + itemstack.shrink(1); + } + lookingEntity.hurt(ModDamageTypes.causeCannonFireDamage(entity.level().registryAccess(), entity, entity), 150); + causeLungeMineExplode(entity.level(), entity, lookingEntity); + } else if (blockState.canOcclude()) { + if (entity instanceof Player player && !player.isCreative()) { + itemstack.shrink(1); + } + CustomExplosion explosion = new CustomExplosion(entity.level(), null, + ModDamageTypes.causeProjectileBoomDamage(entity.level().registryAccess(), entity, entity), 60, + looking.x, looking.y, looking.z, 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1.25f); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(entity.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(entity.level(), hitPos); + } + } + } + + if (itemstack.getOrCreateTag().getInt("AttackTime") > 0) { + itemstack.getOrCreateTag().putInt("AttackTime", itemstack.getOrCreateTag().getInt("AttackTime") - 1); + } + } + + public static void causeLungeMineExplode(Level pLevel, Entity entity, Entity pLivingEntity) { + CustomExplosion explosion = new CustomExplosion(pLevel, pLivingEntity, + ModDamageTypes.causeProjectileBoomDamage(pLevel.registryAccess(), pLivingEntity, entity), 60, + pLivingEntity.getX(), pLivingEntity.getY(), pLivingEntity.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1.25f); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(pLevel, explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(pLevel, pLivingEntity.position()); + } +} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index 4c37a9d48..dd75be953 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -93,7 +93,7 @@ public abstract class GunItem extends Item { @Override public boolean onEntitySwing(ItemStack stack, LivingEntity entity) { - return super.onEntitySwing(stack, entity); + return false; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java new file mode 100644 index 000000000..23aa76275 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java @@ -0,0 +1,45 @@ +package com.atsuishio.superbwarfare.network.message; + +import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.item.LungeMine; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class LungeMineAttackMessage { + + private final int type; + + public LungeMineAttackMessage(int type) { + this.type = type; + } + + public static LungeMineAttackMessage decode(FriendlyByteBuf buffer) { + return new LungeMineAttackMessage(buffer.readInt()); + } + + public static void encode(LungeMineAttackMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + } + + public static void handler(LungeMineAttackMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> { + if (context.getSender() != null) { + Player player = context.getSender(); + + ItemStack stack = player.getMainHandItem(); + + if (stack.is(ModItems.LUNGE_MINE.get())) { + if (message.type == 0) { + LungeMine.attack(stack,player); + } + } + } + }); + context.setPacketHandled(true); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java index 587afcb91..e253d9110 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.tools; -import com.atsuishio.superbwarfare.entity.IArmedVehicleEntity; import com.atsuishio.superbwarfare.entity.VehicleEntity; import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity; import net.minecraft.core.BlockPos; @@ -79,7 +78,7 @@ public class SeekTool { .filter(e -> e.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) <= range * range && e.isAlive() && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand) - && (e instanceof LivingEntity || e instanceof IArmedVehicleEntity) + && (e instanceof LivingEntity || e instanceof VehicleEntity) && !(e instanceof Player player && (player.isCreative() || player.isSpectator()))) .toList(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java index 5e7d3e6da..2b9558460 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java @@ -28,7 +28,7 @@ public class TraceTool { Vec3 viewVec = entity.getViewVector(1.0F); Vec3 toVec = eyePos.add(viewVec.x * entityReach, viewVec.y * entityReach, viewVec.z * entityReach); AABB aabb = entity.getBoundingBox().expandTowards(viewVec.scale(entityReach)).inflate(1.0D, 1.0D, 1.0D); - EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(entity, eyePos, toVec, aabb, p -> !p.isSpectator(), distance); + EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(entity, eyePos, toVec, aabb, p -> !p.isSpectator() && entity.getVehicle() != p && p.isAlive(), distance); if (entityhitresult != null) { Vec3 targetPos = entityhitresult.getLocation(); double distanceToTarget = eyePos.distanceToSqr(targetPos); @@ -68,7 +68,7 @@ public class TraceTool { Vec3 viewVec = player.getViewVector(1.0F); Vec3 toVec = eyePos.add(viewVec.x * entityReach, viewVec.y * entityReach, viewVec.z * entityReach); AABB aabb = player.getBoundingBox().expandTowards(viewVec.scale(entityReach)).inflate(1.0D, 1.0D, 1.0D); - EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(player, eyePos, toVec, aabb, p -> !p.isSpectator() && p.isAlive(), distance); + EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(player, eyePos, toVec, aabb, p -> !p.isSpectator() && player.getVehicle() != p && p.isAlive(), distance); if (entityhitresult != null) { Vec3 targetPos = entityhitresult.getLocation(); double distanceToTarget = eyePos.distanceToSqr(targetPos); diff --git a/src/main/resources/assets/superbwarfare/animations/lunge_mine.animation.json b/src/main/resources/assets/superbwarfare/animations/lunge_mine.animation.json new file mode 100644 index 000000000..d66e0740d --- /dev/null +++ b/src/main/resources/assets/superbwarfare/animations/lunge_mine.animation.json @@ -0,0 +1,86 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.lunge_mine.idle": { + "loop": true + }, + "animation.lunge_mine.fire": { + "animation_length": 0.25, + "bones": { + "bone": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.05": { + "vector": [1.73, 0, 0] + }, + "0.0917": { + "vector": [-6, 0, 0] + }, + "0.1833": { + "vector": [0.73, 0, 0] + }, + "0.2417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.05": { + "vector": [0, -0.4, 2] + }, + "0.0917": { + "vector": [0, 0, -6] + }, + "0.1833": { + "vector": [0, 0, 2] + }, + "0.2417": { + "vector": [0, 0, 0] + } + } + }, + "Lefthand": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.05": { + "vector": [-9.75, 2.75, 0] + }, + "0.0917": { + "vector": [20.25, -5.25, -6.25] + }, + "0.1833": { + "vector": [-9.75, 2.75, 0] + }, + "0.2417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.05": { + "vector": [1.755, 0, -0.945] + }, + "0.0917": { + "vector": [-2.555, 0.405, 1.37] + }, + "0.1833": { + "vector": [1.755, 0, -0.945] + }, + "0.2417": { + "vector": [0, 0, 0] + } + } + } + } + } + }, + "geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/geo/lunge_mine.geo.json b/src/main/resources/assets/superbwarfare/geo/lunge_mine.geo.json new file mode 100644 index 000000000..7823e6b1d --- /dev/null +++ b/src/main/resources/assets/superbwarfare/geo/lunge_mine.geo.json @@ -0,0 +1,1017 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 0, 0] + }, + { + "name": "bone15", + "parent": "bone", + "pivot": [-0.07128, -0.75862, -38], + "rotation": [-90, 0, -112.5] + }, + { + "name": "bone14", + "parent": "bone15", + "pivot": [-0.07128, -0.75862, -38], + "rotation": [0, -22.5, 0], + "cubes": [ + { + "origin": [2.67206, -2.56662, -38.19], + "size": [0.38, 3.616, 0.38], + "pivot": [2.86206, -0.75862, -38], + "rotation": [0, -45, 0], + "uv": { + "north": {"uv": [15, 14], "uv_size": [1, 2]}, + "east": {"uv": [16, 8], "uv_size": [1, 2]}, + "south": {"uv": [10, 16], "uv_size": [1, 2]}, + "west": {"uv": [16, 10], "uv_size": [1, 2]}, + "down": {"uv": [18, 21], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.72794, -2.56662, -35.89], + "size": [0.38, 3.616, 0.38], + "pivot": [-1.53794, -0.75862, -35.7], + "rotation": [0, -45, 0], + "uv": { + "north": {"uv": [11, 16], "uv_size": [1, 2]}, + "east": {"uv": [12, 16], "uv_size": [1, 2]}, + "south": {"uv": [16, 12], "uv_size": [1, 2]}, + "west": {"uv": [13, 16], "uv_size": [1, 2]}, + "down": {"uv": [20, 19], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.72794, -2.56662, -40.49], + "size": [0.38, 3.616, 0.38], + "pivot": [-1.53794, -0.75862, -40.3], + "rotation": [0, 45, 0], + "uv": { + "north": {"uv": [14, 16], "uv_size": [1, 2]}, + "east": {"uv": [16, 14], "uv_size": [1, 2]}, + "south": {"uv": [15, 16], "uv_size": [1, 2]}, + "west": {"uv": [16, 16], "uv_size": [1, 2]}, + "down": {"uv": [19, 21], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "bone1", + "parent": "bone15", + "pivot": [0, 1.56612, -38] + }, + { + "name": "bone2", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [-24.22775, 180, 0], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [10, 10], "uv_size": [1, 2]}, + "south": {"uv": [0, 11], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [1, 11], "uv_size": [1, 2]}, + "south": {"uv": [2, 11], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [3, 11], "uv_size": [1, 2]}, + "south": {"uv": [4, 11], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [4, 17], "uv_size": [1, 1]}, + "south": {"uv": [5, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [2, 17], "uv_size": [1, 1]}, + "south": {"uv": [3, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [0, 17], "uv_size": [1, 1]}, + "south": {"uv": [1, 17], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone3", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [155.77225, 45, 180], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [5, 11], "uv_size": [1, 2]}, + "south": {"uv": [6, 11], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [7, 11], "uv_size": [1, 2]}, + "south": {"uv": [8, 11], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [9, 11], "uv_size": [1, 2]}, + "south": {"uv": [11, 10], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [6, 17], "uv_size": [1, 1]}, + "south": {"uv": [7, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [8, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 8], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [9, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 9], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone4", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [0, 90, 24.22775], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [10, 12], "uv_size": [1, 2]}, + "south": {"uv": [12, 10], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [11, 12], "uv_size": [1, 2]}, + "south": {"uv": [12, 12], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [0, 13], "uv_size": [1, 2]}, + "south": {"uv": [1, 13], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [17, 10], "uv_size": [1, 1]}, + "south": {"uv": [17, 11], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [17, 12], "uv_size": [1, 1]}, + "south": {"uv": [17, 13], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [17, 14], "uv_size": [1, 1]}, + "south": {"uv": [17, 15], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone5", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [-24.22775, 45, 0], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [2, 13], "uv_size": [1, 2]}, + "south": {"uv": [3, 13], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [4, 13], "uv_size": [1, 2]}, + "south": {"uv": [5, 13], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [6, 13], "uv_size": [1, 2]}, + "south": {"uv": [7, 13], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [17, 16], "uv_size": [1, 1]}, + "south": {"uv": [17, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [0, 18], "uv_size": [1, 1]}, + "south": {"uv": [1, 18], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [2, 18], "uv_size": [1, 1]}, + "south": {"uv": [3, 18], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone6", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [-24.22775, 0, 0], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [8, 13], "uv_size": [1, 2]}, + "south": {"uv": [9, 13], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [13, 10], "uv_size": [1, 2]}, + "south": {"uv": [13, 12], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [10, 14], "uv_size": [1, 2]}, + "south": {"uv": [14, 10], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [4, 18], "uv_size": [1, 1]}, + "south": {"uv": [5, 18], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [6, 18], "uv_size": [1, 1]}, + "south": {"uv": [7, 18], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [8, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 8], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone7", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [-24.22775, -45, 0], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [11, 14], "uv_size": [1, 2]}, + "south": {"uv": [12, 14], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [14, 12], "uv_size": [1, 2]}, + "south": {"uv": [13, 14], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [14, 14], "uv_size": [1, 2]}, + "south": {"uv": [0, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [9, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 9], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [10, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 10], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [11, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 11], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone8", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [0, -90, -24.22775], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [1, 15], "uv_size": [1, 2]}, + "south": {"uv": [2, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [3, 15], "uv_size": [1, 2]}, + "south": {"uv": [4, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [5, 15], "uv_size": [1, 2]}, + "south": {"uv": [6, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [12, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 12], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [13, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 13], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [14, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 14], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone9", + "parent": "bone1", + "pivot": [0, 1.56612, -38], + "rotation": [155.77225, -45, -180], + "cubes": [ + { + "origin": [0.51455, 0.1983, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [1.32548, 0.25295, -40.91815], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [7, 15], "uv_size": [1, 2]}, + "south": {"uv": [8, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [-1.39083, 0.07157, -40.9732], + "size": [0.86558, 4.55856, 0.9101], + "inflate": -0.05465, + "pivot": [-0.5799, 0.12622, -40.91815], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [15, 8], "uv_size": [1, 2]}, + "south": {"uv": [9, 15], "uv_size": [1, 2]} + } + }, + { + "origin": [-0.63015, 0.07597, -40.9692], + "size": [1.2603, 4.61358, 0.90211], + "inflate": -0.05025, + "uv": { + "north": {"uv": [15, 10], "uv_size": [1, 2]}, + "south": {"uv": [15, 12], "uv_size": [1, 2]} + } + }, + { + "origin": [0.19438, 4.58464, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [0.5799, 4.6393, -40.91877], + "rotation": [0, 0, -9.64685], + "uv": { + "north": {"uv": [15, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 15], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.63923, 4.5292, -40.9736], + "size": [0.44018, 2.05585, 0.90738], + "inflate": -0.05465, + "pivot": [-0.25371, 4.58385, -40.91877], + "rotation": [0, 0, 9.64685], + "uv": { + "north": {"uv": [16, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 16], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.30396, 4.5336, -40.96938], + "size": [0.60792, 2.07498, 0.9021], + "inflate": -0.05025, + "uv": { + "north": {"uv": [17, 18], "uv_size": [1, 1]}, + "south": {"uv": [18, 17], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "bone10", + "parent": "bone15", + "pivot": [0, 1.54612, -38], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [180, 0, 0], + "uv": { + "east": {"uv": [18, 18], "uv_size": [1, 1]}, + "west": {"uv": [0, 19], "uv_size": [1, 1]}, + "up": {"uv": [1, 19], "uv_size": [1, 1]}, + "down": {"uv": [2, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [-135, 0, 0], + "uv": { + "east": {"uv": [3, 19], "uv_size": [1, 1]}, + "west": {"uv": [4, 19], "uv_size": [1, 1]}, + "up": {"uv": [5, 19], "uv_size": [1, 1]}, + "down": {"uv": [6, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [-45, 0, 0], + "uv": { + "east": {"uv": [19, 9], "uv_size": [1, 1]}, + "west": {"uv": [10, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 10], "uv_size": [1, 1]}, + "down": {"uv": [11, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [-90, 0, 0], + "uv": { + "east": {"uv": [7, 19], "uv_size": [1, 1]}, + "west": {"uv": [8, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 8], "uv_size": [1, 1]}, + "down": {"uv": [9, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [45, 0, 0], + "uv": { + "east": {"uv": [19, 13], "uv_size": [1, 1]}, + "west": {"uv": [14, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 14], "uv_size": [1, 1]}, + "down": {"uv": [15, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [0, 0, 0], + "uv": { + "east": {"uv": [19, 11], "uv_size": [1, 1]}, + "west": {"uv": [12, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 12], "uv_size": [1, 1]}, + "down": {"uv": [13, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [135, 0, 0], + "uv": { + "east": {"uv": [19, 17], "uv_size": [1, 1]}, + "west": {"uv": [18, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 18], "uv_size": [1, 1]}, + "down": {"uv": [19, 20], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.49674, -1.72594, -39.35199], + "size": [0.556, 1.316, 2.70399], + "pivot": [-1.6, 1.53806, -38], + "rotation": [90, 0, 0], + "uv": { + "east": {"uv": [19, 15], "uv_size": [1, 1]}, + "west": {"uv": [16, 19], "uv_size": [1, 1]}, + "up": {"uv": [19, 16], "uv_size": [1, 1]}, + "down": {"uv": [17, 20], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "bone16", + "parent": "bone15", + "pivot": [0.00806, 1.60538, -38], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [180, 0, 0], + "uv": { + "east": {"uv": [20, 19], "uv_size": [1, 1]}, + "up": {"uv": [20, 20], "uv_size": [1, 1]}, + "down": {"uv": [0, 22], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [-135, 0, 0], + "uv": { + "east": {"uv": [21, 0], "uv_size": [1, 1]}, + "up": {"uv": [1, 21], "uv_size": [1, 1]}, + "down": {"uv": [21, 2], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [-45, 0, 0], + "uv": { + "east": {"uv": [2, 21], "uv_size": [1, 1]}, + "up": {"uv": [21, 2], "uv_size": [1, 1]}, + "down": {"uv": [3, 22], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [-90, 0, 0], + "uv": { + "east": {"uv": [21, 3], "uv_size": [1, 1]}, + "up": {"uv": [4, 21], "uv_size": [1, 1]}, + "down": {"uv": [21, 5], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [45, 0, 0], + "uv": { + "east": {"uv": [5, 21], "uv_size": [1, 1]}, + "up": {"uv": [21, 5], "uv_size": [1, 1]}, + "down": {"uv": [6, 22], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [0, 0, 0], + "uv": { + "east": {"uv": [21, 6], "uv_size": [1, 1]}, + "up": {"uv": [7, 21], "uv_size": [1, 1]}, + "down": {"uv": [21, 8], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [135, 0, 0], + "uv": { + "east": {"uv": [8, 21], "uv_size": [1, 1]}, + "up": {"uv": [21, 8], "uv_size": [1, 1]}, + "down": {"uv": [9, 22], "uv_size": [1, -1]} + } + }, + { + "origin": [0.00806, -0.45094, -38.85176], + "size": [1, 1.32908, 1.70351], + "pivot": [-1.03728, 1.60538, -38], + "rotation": [90, 0, 0], + "uv": { + "east": {"uv": [21, 9], "uv_size": [1, 1]}, + "up": {"uv": [10, 21], "uv_size": [1, 1]}, + "down": {"uv": [21, 11], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "bone11", + "parent": "bone15", + "pivot": [0, 7.81612, -38], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [-6.0164, 7.19052, -38.25913], + "size": [9.0728, 1.2512, 0.51826], + "uv": { + "east": {"uv": [0, 20], "uv_size": [1, 1]}, + "west": {"uv": [1, 20], "uv_size": [1, 1]}, + "up": {"uv": [0, 8], "uv_size": [5, 1]}, + "down": {"uv": [5, 9], "uv_size": [5, -1]} + } + }, + { + "origin": [-6.0164, 7.19052, -38.25913], + "size": [9.0728, 1.2512, 0.51826], + "pivot": [0, 7.81612, -38], + "rotation": [45, 0, 0], + "uv": { + "east": {"uv": [2, 20], "uv_size": [1, 1]}, + "west": {"uv": [3, 20], "uv_size": [1, 1]}, + "up": {"uv": [0, 9], "uv_size": [5, 1]}, + "down": {"uv": [5, 10], "uv_size": [5, -1]} + } + }, + { + "origin": [-6.0164, 7.19052, -38.25913], + "size": [9.0728, 1.2512, 0.51826], + "pivot": [0, 7.81612, -38], + "rotation": [90, 0, 0], + "uv": { + "east": {"uv": [6, 20], "uv_size": [1, 1]}, + "west": {"uv": [7, 20], "uv_size": [1, 1]}, + "up": {"uv": [10, 8], "uv_size": [5, 1]}, + "down": {"uv": [10, 10], "uv_size": [5, -1]} + } + }, + { + "origin": [-6.0164, 7.19052, -38.25913], + "size": [9.0728, 1.2512, 0.51826], + "pivot": [0, 7.81612, -38], + "rotation": [135, 0, 0], + "uv": { + "east": {"uv": [4, 20], "uv_size": [1, 1]}, + "west": {"uv": [5, 20], "uv_size": [1, 1]}, + "up": {"uv": [0, 10], "uv_size": [5, 1]}, + "down": {"uv": [5, 11], "uv_size": [5, -1]} + } + } + ] + }, + { + "name": "bone13", + "parent": "bone15", + "pivot": [0, 8.39684, -38], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [2.47568, 7.8901, -38.2099], + "size": [41, 1.01347, 0.41979], + "uv": { + "west": {"uv": [16, 20], "uv_size": [1, 1]}, + "up": {"uv": [0, 0], "uv_size": [21, 1]}, + "down": {"uv": [0, 2], "uv_size": [21, -1]} + } + }, + { + "origin": [2.47568, 7.8901, -38.2099], + "size": [41, 1.01347, 0.41979], + "pivot": [0, 8.39684, -38], + "rotation": [45, 0, 0], + "uv": { + "west": {"uv": [20, 16], "uv_size": [1, 1]}, + "up": {"uv": [0, 2], "uv_size": [21, 1]}, + "down": {"uv": [0, 4], "uv_size": [21, -1]} + } + }, + { + "origin": [2.47568, 7.8901, -38.2099], + "size": [41, 1.01347, 0.41979], + "pivot": [0, 8.39684, -38], + "rotation": [90, 0, 0], + "uv": { + "west": {"uv": [17, 20], "uv_size": [1, 1]}, + "up": {"uv": [0, 4], "uv_size": [21, 1]}, + "down": {"uv": [0, 6], "uv_size": [21, -1]} + } + }, + { + "origin": [2.47568, 7.8901, -38.2099], + "size": [41, 1.01347, 0.41979], + "pivot": [0, 8.39684, -38], + "rotation": [135, 0, 0], + "uv": { + "west": {"uv": [20, 17], "uv_size": [1, 1]}, + "up": {"uv": [0, 6], "uv_size": [21, 1]}, + "down": {"uv": [0, 8], "uv_size": [21, -1]} + } + } + ] + }, + { + "name": "bone12", + "parent": "bone15", + "pivot": [0, 7.80484, -38], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [0.06768, 7.05412, -38.31096], + "size": [0.4, 1.50144, 0.62192], + "uv": { + "east": {"uv": [8, 20], "uv_size": [1, 1]}, + "west": {"uv": [20, 8], "uv_size": [1, 1]}, + "up": {"uv": [9, 20], "uv_size": [1, 1]}, + "down": {"uv": [20, 10], "uv_size": [1, -1]} + } + }, + { + "origin": [0.06768, 7.05412, -38.31096], + "size": [0.4, 1.50144, 0.62192], + "pivot": [0, 7.80484, -38], + "rotation": [45, 0, 0], + "uv": { + "east": {"uv": [10, 20], "uv_size": [1, 1]}, + "west": {"uv": [20, 10], "uv_size": [1, 1]}, + "up": {"uv": [11, 20], "uv_size": [1, 1]}, + "down": {"uv": [20, 12], "uv_size": [1, -1]} + } + }, + { + "origin": [0.06768, 7.05412, -38.31096], + "size": [0.4, 1.50144, 0.62192], + "pivot": [0, 7.80484, -38], + "rotation": [90, 0, 0], + "uv": { + "east": {"uv": [12, 20], "uv_size": [1, 1]}, + "west": {"uv": [20, 12], "uv_size": [1, 1]}, + "up": {"uv": [13, 20], "uv_size": [1, 1]}, + "down": {"uv": [20, 14], "uv_size": [1, -1]} + } + }, + { + "origin": [0.06768, 7.05412, -38.31096], + "size": [0.4, 1.50144, 0.62192], + "pivot": [0, 7.80484, -38], + "rotation": [135, 0, 0], + "uv": { + "east": {"uv": [14, 20], "uv_size": [1, 1]}, + "west": {"uv": [20, 14], "uv_size": [1, 1]}, + "up": {"uv": [15, 20], "uv_size": [1, 1]}, + "down": {"uv": [20, 16], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "Lefthand", + "parent": "bone", + "pivot": [7.01236, -5.43119, -0.83195], + "rotation": [38.46558, -4.86619, -67.48152], + "cubes": [ + { + "origin": [4.71236, -5.43119, -2.78195], + "size": [4, 12, 4], + "uv": { + "north": {"uv": [0, 8], "uv_size": [2, 2]}, + "east": {"uv": [0, 8], "uv_size": [2, 2]}, + "south": {"uv": [0, 8], "uv_size": [2, 2]}, + "west": {"uv": [0, 8], "uv_size": [2, 2]}, + "up": {"uv": [2, 10], "uv_size": [-2, -2]}, + "down": {"uv": [2, 10], "uv_size": [-2, -2]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index c5e713663..ece5a1c4d 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -153,6 +153,7 @@ "item.superbwarfare.ap_5_inches": "AP Shell", "item.superbwarfare.javelin_missile": "Javelin Missile", "item.superbwarfare.heavy_ammo": "Heavy Ammo", + "item.superbwarfare.lunge_mine": "Lunge Mine", "block.superbwarfare.container": "Container", "des.superbwarfare.container.empty": "空的", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index b1cfcbf11..412561761 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -153,6 +153,7 @@ "item.superbwarfare.ap_5_inches": "穿甲弹", "item.superbwarfare.javelin_missile": "标枪导弹", "item.superbwarfare.heavy_ammo": "重型弹药", + "item.superbwarfare.lunge_mine": "突刺爆雷", "block.superbwarfare.container": "集装箱", "des.superbwarfare.container.empty": "空的", diff --git a/src/main/resources/assets/superbwarfare/models/displaysettings/lunge_mine.json b/src/main/resources/assets/superbwarfare/models/displaysettings/lunge_mine.json new file mode 100644 index 000000000..9ab062bfa --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/displaysettings/lunge_mine.json @@ -0,0 +1,114 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 67.5, + 7, + 0 + ], + "translation": [ + -1.75, + 2.5, + -0.25 + ], + "scale": [ + 1.1, + 1.1, + 1.2 + ] + }, + "thirdperson_lefthand": { + "scale": [ + 0, + 0, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 7.14, + -1.62, + 11.61 + ], + "translation": [ + -3.75, + -1, + 0 + ], + "scale": [ + 1.2, + 1.2, + 1.3 + ] + }, + "firstperson_lefthand": { + "scale": [ + 0, + 0, + 0 + ] + }, + "ground": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + 24.75, + 0 + ] + }, + "gui": { + "rotation": [ + 138.65, + -34.86, + 151.18 + ], + "translation": [ + 0, + -0.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "head": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + 29.75, + 0 + ] + }, + "fixed": { + "rotation": [ + 90, + 45, + -90 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + }, + "textures": { + "particle": "item/lunge_mine" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/models/item/lunge_mine.json b/src/main/resources/assets/superbwarfare/models/item/lunge_mine.json new file mode 100644 index 000000000..8fa3111e8 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/lunge_mine.json @@ -0,0 +1,27 @@ +{ + "loader": "forge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "superbwarfare:item/lunge_mine_base" + }, + "perspectives": { + "gui": { + "parent": "superbwarfare:item/lunge_mine_icon" + }, + "thirdperson_righthand": { + "parent": "superbwarfare:item/lunge_mine_base" + }, + "thirdperson_lefthand": { + "parent": "superbwarfare:item/lunge_mine_icon" + }, + "ground": { + "parent": "superbwarfare:item/lunge_mine_icon" + }, + "fixed": { + "parent": "superbwarfare:item/lunge_mine_icon" + }, + "head": { + "parent": "superbwarfare:item/lunge_mine_base" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/models/item/lunge_mine_base.json b/src/main/resources/assets/superbwarfare/models/item/lunge_mine_base.json new file mode 100644 index 000000000..6e3abc98c --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/lunge_mine_base.json @@ -0,0 +1,6 @@ +{ + "parent": "superbwarfare:displaysettings/lunge_mine", + "textures": { + "layer0": "superbwarfare:item/lunge_mine" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/models/item/lunge_mine_icon.json b/src/main/resources/assets/superbwarfare/models/item/lunge_mine_icon.json new file mode 100644 index 000000000..615f6a253 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/lunge_mine_icon.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "superbwarfare:item/lunge_mine_icon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/item/lunge_mine.png b/src/main/resources/assets/superbwarfare/textures/item/lunge_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7999397acc4947686663c32a37f471eaa02337 GIT binary patch literal 1034 zcmV+l1oiugP)PxRU!R9J=WmdkG&RTRd5=Uz|7PbGdtw0StKN?V$QNIWFOOJdCeq)4pUbwmFa z{sNQ=_OM~W0)m9fLunTvhpK@p#ThqB7OtZ>6Kx;io?U2B6GZ-W@fQ%SJ>%cdv(D=Tk1!u23 zIRUMNshIRSHi!tO|2&krZ^@Xj!BAX(Z+>BMasokMXnA2*0>pGEePFh8t0#jN@ z$Hop^4-*~U8;v{Z#3m>3Xr~51ajh_LR<>V|o{3XjzDg#Y!Je}D>D!0r;xd^G2TzWv z)xsRBtFKa52h^hc3NCUgOOcK#LXSXT42$zc z(tc-R0xC?LAel&#&*fQ|U&QbDlph~*dU{H|UZ+;8as9QIaF3cieY8)j)#Ax-d-%T3 z#~-Z^RB`soRQ8>TivuWQ40AVg>})x>4VPcP`+Y=ar&J9Cl{)ujtu@or*+EQk=^9JL zYuw-XVxnu9{t@((%lIubgifbJajk$;s^XNYy!_@I+Yfdr|MB^mf3J+IZDRB-h2Op z5e05d{u%%vcH@n!{Q2`UhS$fx{6lfA!1jaPLGtbko0)8ucsx!nm&39wa=8MHMq^BY z!)OFN&jVn59foCDSXTnJcD^UQp!j-ogZzyI-~70NF^1c3Eu!6N{B9Sgn~y|5(Yrzc zmRDA}$o4!B&-1Wtn|8ZRGMS{^Zj;GmXti2st#S1sO}mOnq`3}#d3Cpe`l zb#;JKs^aQVIbGKU;OOWGfJURiEe&%`mv}o*yq#zNc_k8o*z(FM&eJltU%7+sXwvC4 ziOwv`D_3xym02tJt3+lXc&Jpcdz07*qoM6N<$ Ef;Z#a&j0`b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/textures/item/lunge_mine_icon.png b/src/main/resources/assets/superbwarfare/textures/item/lunge_mine_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..56307b85e4b3a065563cfe3485c6279ddd884564 GIT binary patch literal 559 zcmV+~0?_@5P)WRdBnMmv$*1DREDyMBS-kuB>3@EC7C- z^kg7}F?i;V4sgX;l}|UyWNi~OXAvA75*!^;thqz;&}g=#76E|H*)fH+Mf}sYTH9EE zLfxs7wM`n$maIF~gu2t!*1!kBA|01Dpw;;Slv zrWpwH4G>+y{e?NQwuyh*#>`n1YpyzDjK3Z~VflAs%KaF|2{M&W)}U@eywGzuIhk+0zDvL6W_2OZ4RL-_2`L;3FY3%rAi z*l>Wm)54!`ZR34-&x8IIo%UD0|Ljc+hbdYx2>@%z^xSILgqSk_)y$RA^ksC;5WHIXCH$QNiqNc002ovPDHLkV1gW3_+bD5 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/superbwarfare/recipes/lunge_mine_crafting.json b/src/main/resources/data/superbwarfare/recipes/lunge_mine_crafting.json new file mode 100644 index 000000000..3b6aa7e0d --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/lunge_mine_crafting.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + " ba", + " cb", + "c " + ], + "key": { + "a": { + "item": "minecraft:tnt" + }, + "b": { + "item": "superbwarfare:high_energy_explosives" + }, + "c": { + "item": "minecraft:stick" + } + }, + "result": { + "item": "superbwarfare:lunge_mine", + "count": 2 + } +} \ No newline at end of file