From b7f9ebce65223d6aef411c309d76005bb777272e Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sat, 18 Jan 2025 11:27:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=9D=90=E6=96=99?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E9=85=8D=E6=96=B9?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0LAV150=E7=9A=84=E9=85=8D=E6=96=B9?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=8C=E6=AC=A1=E7=81=BE=E5=8F=98?= =?UTF-8?q?=E8=BF=91=E6=88=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../b69ee8a2655365569b979911c0440daa8c470ac2 | 4 +- .../models/item/light_armament_module.json | 6 + .../superbwarfare/models/item/wheel.json | 6 + .../com/atsuishio/superbwarfare/ModUtils.java | 1 + .../datagen/ModItemModelProvider.java | 2 + .../entity/vehicle/Mk42Entity.java | 2 - .../event/ClientEventHandler.java | 45 ++++- .../superbwarfare/init/ModItems.java | 2 + .../superbwarfare/init/ModKeyMappings.java | 2 + .../superbwarfare/item/gun/GunItem.java | 3 + .../item/gun/launcher/SecondaryCataclysm.java | 29 +++ .../network/message/MeleeAttackMessage.java | 45 +++++ .../superbwarfare/tools/TraceTool.java | 19 ++ .../secondary_cataclysm.animation.json | 165 +++++++++++++++++- .../assets/superbwarfare/lang/en_us.json | 3 + .../assets/superbwarfare/lang/zh_cn.json | 3 + .../textures/item/light_armament_module.png | Bin 0 -> 731 bytes .../superbwarfare/textures/item/wheel.png | Bin 0 -> 590 bytes .../superbwarfare/recipes/ah_6_crafting.json | 2 +- .../recipes/cannon_core_crafting.json | 2 +- ... => cemented_carbide_barrel_crafting.json} | 0 .../recipes/lav_150_crafting.json | 37 ++++ .../light_armament_module_crafting.json | 27 +++ .../recipes/wheel_chair_crafting.json | 2 +- .../superbwarfare/recipes/wheel_crafting.json | 21 +++ 25 files changed, 418 insertions(+), 10 deletions(-) create mode 100644 src/generated/resources/assets/superbwarfare/models/item/light_armament_module.json create mode 100644 src/generated/resources/assets/superbwarfare/models/item/wheel.json create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/MeleeAttackMessage.java create mode 100644 src/main/resources/assets/superbwarfare/textures/item/light_armament_module.png create mode 100644 src/main/resources/assets/superbwarfare/textures/item/wheel.png rename src/main/resources/data/superbwarfare/recipes/{cemented_carbide_ingot_crafting.json => cemented_carbide_barrel_crafting.json} (100%) create mode 100644 src/main/resources/data/superbwarfare/recipes/lav_150_crafting.json create mode 100644 src/main/resources/data/superbwarfare/recipes/light_armament_module_crafting.json create mode 100644 src/main/resources/data/superbwarfare/recipes/wheel_crafting.json diff --git a/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 b/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 index 86199c230..aedbc30be 100644 --- a/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 +++ b/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 @@ -1,4 +1,4 @@ -// 1.20.1 2025-01-17T20:28:44.4663695 Item Models: superbwarfare +// 1.20.1 2025-01-18T09:52:20.4788146 Item Models: superbwarfare 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/aa_12_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/ak_12_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/ak_47_blueprint.json @@ -50,6 +50,7 @@ e04bbd61e716fc5d53c9425aba508fc3287bfd57 assets/superbwarfare/models/item/iron_p 95c0f92c4a4b3adff9c95878540071b04a921792 assets/superbwarfare/models/item/large_propeller.json ce9e4fd8ea92cfdbdda158776c1b6e1b482a3f2a assets/superbwarfare/models/item/lead_ingot.json f66c351b4843ad4d4e086ccfb7d4d0221227d196 assets/superbwarfare/models/item/legendary_material_pack.json +ec76dc1a79f4c0e502fee53be8aa8e04420845fc assets/superbwarfare/models/item/light_armament_module.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/m2hb_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/marlin_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/minigun_blueprint.json @@ -111,3 +112,4 @@ b4e6c184478f8dc764fb7071ac5e30939cd01d9d assets/superbwarfare/models/item/tungst fe78719387b06e37de4abe02c808a8f2dba179f8 assets/superbwarfare/models/item/us_chest_iotv.json 01dabedc256e53d58a14f4ba9ce83b839f3a7bdb assets/superbwarfare/models/item/us_helmet_pastg.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/vector_blueprint.json +7e4ba98653b69bcdc7e9bdbd05d2e8b8b20df293 assets/superbwarfare/models/item/wheel.json diff --git a/src/generated/resources/assets/superbwarfare/models/item/light_armament_module.json b/src/generated/resources/assets/superbwarfare/models/item/light_armament_module.json new file mode 100644 index 000000000..4a324c56b --- /dev/null +++ b/src/generated/resources/assets/superbwarfare/models/item/light_armament_module.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "superbwarfare:item/light_armament_module" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/superbwarfare/models/item/wheel.json b/src/generated/resources/assets/superbwarfare/models/item/wheel.json new file mode 100644 index 000000000..e6682c814 --- /dev/null +++ b/src/generated/resources/assets/superbwarfare/models/item/wheel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "superbwarfare:item/wheel" + } +} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index aeeea4191..d695d3b95 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -167,6 +167,7 @@ public class ModUtils { addNetworkMessage(PlayerStopRidingMessage.class, PlayerStopRidingMessage::encode, PlayerStopRidingMessage::decode, PlayerStopRidingMessage::handler); addNetworkMessage(AimVillagerMessage.class, AimVillagerMessage::encode, AimVillagerMessage::decode, AimVillagerMessage::handler); addNetworkMessage(ShowChargingRangeMessage.class, ShowChargingRangeMessage::encode, ShowChargingRangeMessage::decode, ShowChargingRangeMessage::handler); + addNetworkMessage(MeleeAttackMessage.class, MeleeAttackMessage::encode, MeleeAttackMessage::decode, MeleeAttackMessage::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/datagen/ModItemModelProvider.java b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java index d36b60953..269564aa7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java +++ b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java @@ -31,7 +31,9 @@ public class ModItemModelProvider extends ItemModelProvider { simpleItem(ModItems.LARGE_PROPELLER); simpleItem(ModItems.MOTOR); simpleItem(ModItems.LARGE_MOTOR); + simpleItem(ModItems.WHEEL); simpleItem(ModItems.DRONE); + simpleItem(ModItems.LIGHT_ARMAMENT_MODULE); simpleItem(ModItems.TARGET_DEPLOYER); simpleItem(ModItems.MORTAR_DEPLOYER); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index 2bec648db..688f59104 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -301,8 +301,6 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, ICannonEntit this.setXRot(Mth.clamp(this.getXRot() + Mth.clamp(diffX, -3f, 3f), -85, 16.3f)); } } - - } public boolean setTarget(ItemStack stack) { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index a4ddff82f..65017fb0f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -146,6 +146,7 @@ public class ClientEventHandler { public static double shakeType = 0; public static int lungeAttack; public static int lungeDraw; + public static int gunMelee; public static int lungeSprint; public static Entity entity; @@ -220,6 +221,7 @@ public class ClientEventHandler { isProne(player); beamShoot(player, stack); handleLungeAttack(player, stack); + handleGunMelee(player, stack); if (event.phase == TickEvent.Phase.END) { handleVariableDecrease(); @@ -249,6 +251,43 @@ public class ClientEventHandler { && !level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 1.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude(); } + public static void handleGunMelee(Player player, ItemStack stack) { + if (stack.getItem() instanceof GunItem gunItem) { + if (gunItem.canUseMelee(stack) && gunMelee == 0 && drawTime < 0.01 + && ModKeyMappings.MELEE.isDown() + && !(player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) + && !holdFireVehicle + && !notInGame() + && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && !GunsTool.getGunBooleanTag(stack, "Reloading") + && !player.getCooldowns().isOnCooldown(stack.getItem()) + && !GunsTool.getGunBooleanTag(stack, "Charging")) { + gunMelee = 36; + cantFireTime = 40; + player.playSound(SoundEvents.PLAYER_ATTACK_SWEEP, 1f, 1); + } + if (gunMelee == 22) { + + boolean lookAtEntity = false; + + Entity lookingEntity = TraceTool.findMeleeEntity(player, player.getEntityReach()); + + if (lookingEntity != null) { + lookAtEntity = true; + } + + if (lookAtEntity) { + ModUtils.PACKET_HANDLER.sendToServer(new MeleeAttackMessage(lookingEntity.getUUID())); + } + } + } + + if (gunMelee > 0) { + gunMelee--; + } + } + public static void handleLungeAttack(Player player, ItemStack stack) { if (stack.is(ModItems.LUNGE_MINE.get()) && lungeAttack == 0 && lungeDraw == 0 && holdFire) { lungeAttack = 36; @@ -260,12 +299,12 @@ public class ClientEventHandler { boolean lookAtEntity = false; - Entity lookingEntity = TraceTool.findLookingEntity(player, player.getEntityReach() + 2); + Entity lookingEntity = TraceTool.findLookingEntity(player, player.getEntityReach() + 2.5); - BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2)), + BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2.5)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); - Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()); + Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2.5)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()); BlockState blockState = player.level().getBlockState(BlockPos.containing(looking.x(), looking.y(), looking.z())); if (lookingEntity != null) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index 8f4469fb1..e1379ff47 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -123,6 +123,7 @@ public class ModItems { public static final RegistryObject LARGE_PROPELLER = ITEMS.register("large_propeller", () -> new Item(new Item.Properties())); public static final RegistryObject MOTOR = ITEMS.register("motor", () -> new Item(new Item.Properties())); public static final RegistryObject LARGE_MOTOR = ITEMS.register("large_motor", () -> new Item(new Item.Properties())); + public static final RegistryObject WHEEL = ITEMS.register("wheel", () -> new Item(new Item.Properties())); public static final RegistryObject DRONE = ITEMS.register("drone", Drone::new); public static final RegistryObject MONITOR = ITEMS.register("monitor", Monitor::new); @@ -229,6 +230,7 @@ public class ModItems { public static final RegistryObject MK_42_BLUEPRINT = ITEMS.register("mk_42_blueprint", () -> new BlueprintItem(RarityTool.LEGENDARY)); public static final RegistryObject MLE_1934_BLUEPRINT = ITEMS.register("mle_1934_blueprint", () -> new BlueprintItem(RarityTool.LEGENDARY)); public static final RegistryObject ANNIHILATOR_BLUEPRINT = ITEMS.register("annihilator_blueprint", () -> new BlueprintItem(RarityTool.LEGENDARY)); + public static final RegistryObject LIGHT_ARMAMENT_MODULE = ITEMS.register("light_armament_module", () -> new BlueprintItem(Rarity.RARE)); /** * Block diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java b/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java index a8a82095d..9bc7ebc70 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java @@ -54,6 +54,7 @@ public class ModKeyMappings { public static final KeyMapping HOLD_ZOOM = new KeyMapping("key.superbwarfare.hold_zoom", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_RIGHT, "key.categories.superbwarfare"); public static final KeyMapping SWITCH_ZOOM = new KeyMapping("key.superbwarfare.switch_zoom", GLFW.GLFW_KEY_UNKNOWN, "key.categories.superbwarfare"); public static final KeyMapping RELEASE_DECOY = new KeyMapping("key.superbwarfare.release_decoy", GLFW.GLFW_KEY_X, "key.categories.superbwarfare"); + public static final KeyMapping MELEE = new KeyMapping("key.superbwarfare.melee", GLFW.GLFW_KEY_V, "key.categories.superbwarfare"); @SubscribeEvent public static void registerKeyMappings(RegisterKeyMappingsEvent event) { @@ -75,6 +76,7 @@ public class ModKeyMappings { event.register(HOLD_ZOOM); event.register(SWITCH_ZOOM); event.register(RELEASE_DECOY); + event.register(MELEE); } @Mod.EventBusSubscriber(value = Dist.CLIENT) 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 732f40cba..ebffcb46f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -295,6 +295,9 @@ public abstract class GunItem extends Item { public boolean ejectShell(ItemStack stack) { return false; } + public boolean canUseMelee(ItemStack stack) { + return false; + } public int getFireMode() { return 0; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java index c14574a16..c2a48ae0c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java @@ -14,6 +14,8 @@ import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.RarityTool; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -23,7 +25,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ItemDisplayContext; @@ -43,6 +49,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Optional; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.function.Supplier; @@ -131,6 +138,10 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, AnimatedItem return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.iterativeload2")); } + if (ClientEventHandler.gunMelee > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.hit")); + } + if (stack.getOrCreateTag().getInt("reload_stage") == 3) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.finish")); } @@ -151,6 +162,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, AnimatedItem && stack.getOrCreateTag().getInt("reload_stage") != 2 && stack.getOrCreateTag().getInt("reload_stage") != 3 && ClientEventHandler.drawTime < 0.01 + && ClientEventHandler.gunMelee == 0 && !GunsTool.getGunBooleanTag(stack, "Reloading")) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sc.run_fast")); @@ -264,11 +276,28 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, AnimatedItem return Optional.of(new SecondaryCataclysmImageComponent(pStack)); } + @Override + public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { + Multimap map = super.getAttributeModifiers(slot, stack); + UUID uuid = new UUID(slot.toString().hashCode(), 0); + if (slot == EquipmentSlot.MAINHAND) { + map = HashMultimap.create(map); + map.put(Attributes.ATTACK_DAMAGE, + new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER,19, AttributeModifier.Operation.ADDITION)); + } + return map; + } + @Override public boolean isIterativeReload(ItemStack stack) { return true; } + @Override + public boolean canUseMelee(ItemStack stack) { + return true; + } + @Override public int getFireMode() { return FireMode.SEMI.flag; diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/MeleeAttackMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/MeleeAttackMessage.java new file mode 100644 index 000000000..7e186c408 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/MeleeAttackMessage.java @@ -0,0 +1,45 @@ +package com.atsuishio.superbwarfare.network.message; + +import com.atsuishio.superbwarfare.tools.EntityFindUtil; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.network.NetworkEvent; + +import java.util.UUID; +import java.util.function.Supplier; + +public class MeleeAttackMessage { + + private final UUID uuid; + + public MeleeAttackMessage(UUID uuid) { + + this.uuid = uuid; + } + + public static MeleeAttackMessage decode(FriendlyByteBuf buffer) { + return new MeleeAttackMessage(buffer.readUUID()); + } + + public static void encode(MeleeAttackMessage message, FriendlyByteBuf buffer) { + buffer.writeUUID(message.uuid); + } + + public static void handler(MeleeAttackMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> { + if (context.getSender() != null) { + Player player = context.getSender(); + + Entity lookingEntity = EntityFindUtil.findEntity(player.level(), String.valueOf(message.uuid)); + if (lookingEntity != null) { + player.attack(lookingEntity); + } + } + }); + context.setPacketHandled(true); + } + + +} diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java index 2b9558460..65031b7a1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java @@ -44,6 +44,25 @@ public class TraceTool { return null; } + public static Entity findMeleeEntity(Entity entity, double entityReach) { + double distance = entityReach * entityReach; + Vec3 eyePos = entity.getEyePosition(1.0f); + HitResult hitResult = entity.pick(entityReach, 1.0f, false); + + 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() && entity.getVehicle() != p && p.isAlive(), distance); + if (entityhitresult != null) { + hitResult = entityhitresult; + + } + if (hitResult.getType() == HitResult.Type.ENTITY) { + return ((EntityHitResult) hitResult).getEntity(); + } + return null; + } + public static Entity laserfindLookingEntity(Entity player, double entityReach) { BlockHitResult blockResult = player.level().clip( diff --git a/src/main/resources/assets/superbwarfare/animations/secondary_cataclysm.animation.json b/src/main/resources/assets/superbwarfare/animations/secondary_cataclysm.animation.json index 287bf3130..ddcce178b 100644 --- a/src/main/resources/assets/superbwarfare/animations/secondary_cataclysm.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/secondary_cataclysm.animation.json @@ -358,7 +358,7 @@ "0.975": [0, 0, 45], "1.1333": [0, 0, 45], "1.4833": [0, 0, 45], - "1.4834": [0, 0, 0], + "1.4834": [0, 0, 0], "1.5167": [0, 0, 0] }, "position": [0, 0, 0] @@ -1039,6 +1039,169 @@ } } } + }, + "animation.sc.hit": { + "animation_length": 1, + "bones": { + "0": { + "rotation": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.0917": { + "post": [-5.94963, -8.76229, -6.05976], + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": [14.48058, -6.87966, -12.98807], + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": [-2.38602, -3.01888, -5.49135], + "lerp_mode": "catmullrom" + }, + "0.3": { + "post": [-2.38602, -3.01888, 7.65865], + "lerp_mode": "catmullrom" + }, + "0.4": { + "post": [2.08183, 1.5984, -4.23932], + "lerp_mode": "catmullrom" + }, + "0.5167": { + "post": [-2.07662, -0.86851, 1.03602], + "lerp_mode": "catmullrom" + }, + "0.6333": { + "post": [1.13, 0.68, -0.56], + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.0667": { + "post": [-1.34989, -2.53343, -0.04567], + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": [-4.3, -5, 9.45], + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": [-1.3, -2.8, -1.25], + "lerp_mode": "catmullrom" + }, + "0.3": { + "post": [-0.05, -2.65, -7.45], + "lerp_mode": "catmullrom" + }, + "0.4": { + "post": [0.09403, 0.11922, -1.00188], + "lerp_mode": "catmullrom" + }, + "0.475": { + "post": [-0.1, 0.02, 1.05], + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": [-0.09328, 0.05092, -0.10899], + "lerp_mode": "catmullrom" + }, + "0.675": { + "post": [-0.01, 0.01, 0.24], + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + } + }, + "camera": { + "rotation": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.1": { + "post": [1.25, -1, -2], + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": [1.25, -0.75, 1.05], + "lerp_mode": "catmullrom" + }, + "0.3": { + "post": [1.91, -1.57, -3.13], + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": [-2.08, 0.85, 3.57], + "lerp_mode": "catmullrom" + }, + "0.4417": { + "post": [1.04, -1.31, -0.57], + "lerp_mode": "catmullrom" + }, + "0.5667": { + "post": [-0.13, 0.13, 0.22], + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + } + }, + "tiba": { + "rotation": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.0667": { + "post": [0, 0, -12], + "lerp_mode": "catmullrom" + }, + "0.15": { + "post": [0, 0, 2.15], + "lerp_mode": "catmullrom" + }, + "0.2417": { + "post": [0, 0, 19.73], + "lerp_mode": "catmullrom" + }, + "0.3083": { + "post": [0, 0, -7.5], + "lerp_mode": "catmullrom" + }, + "0.4": { + "post": [0, 0, 12.77], + "lerp_mode": "catmullrom" + }, + "0.4833": { + "post": [0, 0, -2.77], + "lerp_mode": "catmullrom" + }, + "0.6": { + "post": [0, 0, 1.57], + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + } + } + } } } } \ 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 6c7685bad..b0ec6aed6 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -191,6 +191,7 @@ "item.superbwarfare.large_propeller": "Large Propeller", "item.superbwarfare.motor": "Motor", "item.superbwarfare.large_motor": "Large Motor", + "item.superbwarfare.wheel": "Wheel", "item.superbwarfare.hand_grenade": "Hand Grenade", "item.superbwarfare.rgo_grenade": "RGO Grenade", "item.superbwarfare.transcript": "Transcript", @@ -199,6 +200,7 @@ "des.superbwarfare.transcript.distance": "Distance: ", "des.superbwarfare.transcript.total": "Total: ", "item.superbwarfare.beam_test": "[ZzzzBoom!]", + "item.superbwarfare.light_armament_module": "Light Armament Module", "attribute.superbwarfare.bullet_resistance": "Bullet Resistance", @@ -414,6 +416,7 @@ "key.superbwarfare.edit_stock": "Switch Stock", "key.superbwarfare.edit_grip": "Switch Grip", "key.superbwarfare.release_decoy": "Release Decoy", + "key.superbwarfare.melee": "Melee", "effect.superbwarfare.shock": "Shock", "effect.superbwarfare.burn": "Burn", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index b54973d81..2f45dfe47 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -191,6 +191,7 @@ "item.superbwarfare.large_propeller": "大型螺旋桨", "item.superbwarfare.motor": "马达", "item.superbwarfare.large_motor": "大型电动机", + "item.superbwarfare.wheel": "车轮", "item.superbwarfare.hand_grenade": "M67手榴弹", "item.superbwarfare.rgo_grenade": "RGO手榴弹", "item.superbwarfare.transcript": "成绩单", @@ -199,6 +200,7 @@ "des.superbwarfare.transcript.distance": "距离:", "des.superbwarfare.transcript.total": "总环数:", "item.superbwarfare.beam_test": "[滋崩]", + "item.superbwarfare.light_armament_module": "轻型武装模块", "attribute.superbwarfare.bullet_resistance": "子弹防护", @@ -412,6 +414,7 @@ "key.superbwarfare.edit_stock": "切换枪托", "key.superbwarfare.edit_grip": "切换握把", "key.superbwarfare.release_decoy": "释放诱饵", + "key.superbwarfare.melee": "枪械近战", "effect.superbwarfare.shock": "电击", "effect.superbwarfare.burn": "点燃", diff --git a/src/main/resources/assets/superbwarfare/textures/item/light_armament_module.png b/src/main/resources/assets/superbwarfare/textures/item/light_armament_module.png new file mode 100644 index 0000000000000000000000000000000000000000..45646b4400bbcda1e680997535ac4f1bd7e0d585 GIT binary patch literal 731 zcmV<10wn#3P)G<=rXTKNp3+-uuTq_W>2sjfF5_L z9wl`ykXP)8wH4bKSU=mCuL(v5Bw3O*Faa{B0D$ZD`V6f|2yVAq@lJ!bZSj2O=Z7~s z$kBKJ7$cx43IM>z=iga3`26@Y9`}9!J6d_od;Iv^M00gVH4G9J*> zfUV{Hsy-kGb_ax3AT%#EAhw*9<)RZ@T?qV~tIpNzK48^5L0>dq&7$i>ClrSO-%ha+ zT?#BU-h?h{WTJAwl(If}Ndd|kqcUf8_}e+{16c>&2Uu%Bb*>;ff%;O9p~;ozImelj z`=-9wyV@v=pbcKs%CcNlH>?hz)s`QiQ$S|Pwnz7;NTbN(5m;YpG@WX!fEuAP)wu%7 zm(vR4=kc~}0RX4dX|+L1!*mq0UXonQ9Y2M6qxGxOc?tBB1G?RTG8gK(Oxeg#(8t!2SgbGCTzRFQj&52 zZILpxjV^UU6uUr3l6oINjggGNcL5wQINhIv(E@3Uc}k2xuH23v*yk0Xj(GU!OZ3_y^QPAhV>Exv&5L N002ovPDHLkV1f=sJfi>r literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/textures/item/wheel.png b/src/main/resources/assets/superbwarfare/textures/item/wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..029a1d353433b946fe78d96d6db9e7f71301f04b GIT binary patch literal 590 zcmV-U0Tlg~;UQ5eO4_s(cc#K}ZrS2CF~W170ru8R*)+MOW2 zL7{Y2s6||h)I#4t!JQQP6s`0bL`gJg7be8&L?@Zt%LGtr4)u?T!VzbG=~_;j&O4Fi`^gJlXr;&&-3)$+;c9@e-lL!wR#=%hM?c? zQ!bYY!z;$e3%IVU4-XGTiXd;>gy9vvUXO!=176I}V_A8IhKI@L^K5TzQmIrxYjU|< z;#vauzOSp*Dp!}6)M_&A zaf}dxvhVZ$!$-b--2q^EWfg#IHhYbc5-H_h2SNyxQfRF)3O`%X=IFsS5-DWTt5cT_@HICyDh9Rw1i%zG*y)oW=RSjTS z7R6$b+~_D$N|aKxnoWWrAP54Ej*b%Hduch2qXBH&W^8N>Atk+Tmu9p1;7&ZcOt(aL c9RC0M1D2%Pr5k(!I{*Lx07*qoM6N<$f=&AobpQYW literal 0 HcmV?d00001 diff --git a/src/main/resources/data/superbwarfare/recipes/ah_6_crafting.json b/src/main/resources/data/superbwarfare/recipes/ah_6_crafting.json index 7c71a4809..3ad07866b 100644 --- a/src/main/resources/data/superbwarfare/recipes/ah_6_crafting.json +++ b/src/main/resources/data/superbwarfare/recipes/ah_6_crafting.json @@ -29,7 +29,7 @@ "item": "superbwarfare:cell" }, "h": { - "item": "minecraft:dispenser" + "item": "superbwarfare:light_armament_module" } }, "result": { diff --git a/src/main/resources/data/superbwarfare/recipes/cannon_core_crafting.json b/src/main/resources/data/superbwarfare/recipes/cannon_core_crafting.json index eafb66806..c2013cac5 100644 --- a/src/main/resources/data/superbwarfare/recipes/cannon_core_crafting.json +++ b/src/main/resources/data/superbwarfare/recipes/cannon_core_crafting.json @@ -14,7 +14,7 @@ "item": "minecraft:dispenser" }, "c": { - "item": "minecraft:nether_star" + "item": "superbwarfare:cemented_carbide_action" }, "d": { "item": "minecraft:piston" diff --git a/src/main/resources/data/superbwarfare/recipes/cemented_carbide_ingot_crafting.json b/src/main/resources/data/superbwarfare/recipes/cemented_carbide_barrel_crafting.json similarity index 100% rename from src/main/resources/data/superbwarfare/recipes/cemented_carbide_ingot_crafting.json rename to src/main/resources/data/superbwarfare/recipes/cemented_carbide_barrel_crafting.json diff --git a/src/main/resources/data/superbwarfare/recipes/lav_150_crafting.json b/src/main/resources/data/superbwarfare/recipes/lav_150_crafting.json new file mode 100644 index 000000000..5fa465fe9 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/lav_150_crafting.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "dbf", + "eee", + "hgh" + ], + "key": { + "b": { + "item": "superbwarfare:light_armament_module" + }, + "d": { + "item": "superbwarfare:cell" + }, + "e": { + "item":"superbwarfare:steel_block" + }, + "f": { + "item": "minecraft:chest" + }, + "g": { + "item": "superbwarfare:large_motor" + }, + "h": { + "item": "superbwarfare:wheel" + } + }, + "result": { + "item": "superbwarfare:container", + "nbt": { + "BlockEntityTag": { + "EntityType": "superbwarfare:lav_150" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/recipes/light_armament_module_crafting.json b/src/main/resources/data/superbwarfare/recipes/light_armament_module_crafting.json new file mode 100644 index 000000000..b0baace05 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/light_armament_module_crafting.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "ddd", + "abc", + "ddd" + ], + "key": { + "a": { + "item": "superbwarfare:steel_barrel" + }, + "b": { + "item": "superbwarfare:rare_material_pack" + }, + "c": { + "item": "minecraft:dispenser" + }, + "d": { + "tag":"forge:ingots/steel" + } + }, + "result": { + "item": "superbwarfare:light_armament_module", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/recipes/wheel_chair_crafting.json b/src/main/resources/data/superbwarfare/recipes/wheel_chair_crafting.json index 20736b8a2..cae0ad894 100644 --- a/src/main/resources/data/superbwarfare/recipes/wheel_chair_crafting.json +++ b/src/main/resources/data/superbwarfare/recipes/wheel_chair_crafting.json @@ -13,7 +13,7 @@ "item": "superbwarfare:cell" }, "c": { - "item": "minecraft:black_wool" + "item": "superbwarfare:wheel" }, "d": { "item": "superbwarfare:motor" diff --git a/src/main/resources/data/superbwarfare/recipes/wheel_crafting.json b/src/main/resources/data/superbwarfare/recipes/wheel_crafting.json new file mode 100644 index 000000000..e3692eb20 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/wheel_crafting.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + " a ", + "aba", + " a " + ], + "key": { + "a": { + "item": "minecraft:black_wool" + }, + "b": { + "tag":"forge:ingots/iron" + } + }, + "result": { + "item": "superbwarfare:wheel", + "count": 1 + } +} \ No newline at end of file