diff --git a/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 b/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 index f6e380858..86199c230 100644 --- a/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 +++ b/src/generated/resources/.cache/b69ee8a2655365569b979911c0440daa8c470ac2 @@ -1,4 +1,4 @@ -// 1.20.1 2025-01-09T05:18:04.2557625 Item Models: superbwarfare +// 1.20.1 2025-01-17T20:28:44.4663695 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 @@ -89,10 +89,12 @@ ce0f0949b0545d8ef08aeaa52dd423dbe592f704 assets/superbwarfare/models/item/raw_ce 34aecddee2e3b903c075b1625e1b23c57ea23fd1 assets/superbwarfare/models/item/ru_chest_6b43.json 66a2586547a7cc44a80f950036a1795af580518a assets/superbwarfare/models/item/ru_helmet_6b47.json ce2232fbc6a9186371c6ae6745ec3be2a0a33546 assets/superbwarfare/models/item/scheelite.json +13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/secondary_cataclysm_blueprint.json c010baff106b3307ec585df4757f7c3d756e9794 assets/superbwarfare/models/item/seeker.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/sentinel_blueprint.json 129239c26d14526d65764dc10ef99864c9ef7fff assets/superbwarfare/models/item/silver_ingot.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/sks_blueprint.json +6c55bc5d7664a4bc351118876c97c78597f05df7 assets/superbwarfare/models/item/small_shell.json 93a18630b8c0a5aab1f0202f42b8bd5ee7153c38 assets/superbwarfare/models/item/steel_action.json 321bafbe4487eda1a6ca82eec647eabc3230a4e3 assets/superbwarfare/models/item/steel_barrel.json b4e009177af3af6ad6dda54e3e2fed43dc243ff2 assets/superbwarfare/models/item/steel_ingot.json diff --git a/src/generated/resources/assets/superbwarfare/models/item/secondary_cataclysm_blueprint.json b/src/generated/resources/assets/superbwarfare/models/item/secondary_cataclysm_blueprint.json new file mode 100644 index 000000000..7bbbd3bbb --- /dev/null +++ b/src/generated/resources/assets/superbwarfare/models/item/secondary_cataclysm_blueprint.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "superbwarfare:item/gun_blueprint" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/superbwarfare/models/item/small_shell.json b/src/generated/resources/assets/superbwarfare/models/item/small_shell.json new file mode 100644 index 000000000..96d0a8602 --- /dev/null +++ b/src/generated/resources/assets/superbwarfare/models/item/small_shell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "superbwarfare:item/small_shell" + } +} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 6fd39c9bb..6094cdc04 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -386,8 +386,29 @@ public class ClickHandler { Player player = Minecraft.getInstance().player; if (player == null) return; - handleVehicleMove(key, state, player); + handleDroneMove(key, state, player); + } + + private static void handleDroneMove(int key, int state, Player player) { + ItemStack stack = player.getMainHandItem(); + if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) { + var options = Minecraft.getInstance().options; + + if (key == options.keyLeft.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(0, state == 1)); + } else if (key == options.keyRight.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(1, state == 1)); + } else if (key == options.keyUp.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(2, state == 1)); + } else if (key == options.keyDown.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(3, state == 1)); + } else if (key == options.keyJump.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(4, state == 1)); + } else if (key == options.keyShift.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(5, state == 1)); + } + } } private static void handleVehicleMove(int key, int state, Player player) { diff --git a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java index 97f0536e2..d36b60953 100644 --- a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java +++ b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemModelProvider.java @@ -68,6 +68,7 @@ public class ModItemModelProvider extends ItemModelProvider { simpleItem(ModItems.BEAM_TEST); simpleItem(ModItems.HEAVY_AMMO); simpleItem(ModItems.ROCKET_70); + simpleItem(ModItems.SMALL_SHELL); simpleItem(ModItems.TUNGSTEN_ROD); simpleItem(ModItems.IRON_BARREL); @@ -136,6 +137,7 @@ public class ModItemModelProvider extends ItemModelProvider { cannonBlueprintItem(ModItems.MLE_1934_BLUEPRINT); cannonBlueprintItem(ModItems.ANNIHILATOR_BLUEPRINT); gunBlueprintItem(ModItems.M_2_HB_BLUEPRINT); + gunBlueprintItem(ModItems.SECONDARY_CATACLYSM_BLUEPRINT); // blocks evenSimplerBlockItem(ModBlocks.BARBED_WIRE); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java index 82836155f..1e8abacbf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java @@ -66,7 +66,7 @@ public class SmallCannonShellEntity extends ThrowableItemProjectile implements G @Override protected Item getDefaultItem() { - return ModItems.GRENADE_40MM.get(); + return ModItems.SMALL_SHELL.get(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index 53bc7bb96..b1a15ea6a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -226,7 +226,7 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC } if (this.getEntityData().get(WEAPON_TYPE) == 0) { - this.entityData.set(AMMO, this.getItemStacks().stream().filter(stack -> stack.is(ModItems.HEAVY_AMMO.get())).mapToInt(ItemStack::getCount).sum()); + this.entityData.set(AMMO, this.getItemStacks().stream().filter(stack -> stack.is(ModItems.SMALL_SHELL.get())).mapToInt(ItemStack::getCount).sum()); } else { this.entityData.set(AMMO, this.getEntityData().get(LOADED_COAX_AMMO)); } @@ -356,7 +356,7 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC this.entityData.set(HEAT, this.entityData.get(HEAT) + 7); this.entityData.set(FIRE_ANIM, 3); - this.getItemStacks().stream().filter(stack -> stack.is(ModItems.HEAVY_AMMO.get())).findFirst().ifPresent(stack -> stack.shrink(1)); + this.getItemStacks().stream().filter(stack -> stack.is(ModItems.SMALL_SHELL.get())).findFirst().ifPresent(stack -> stack.shrink(1)); } else if (entityData.get(WEAPON_TYPE) == 1) { if (this.cannotFireCoax) return; @@ -466,7 +466,7 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC } this.entityData.set(POWER, this.entityData.get(POWER) * 0.97f); - this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * (float)Math.max(0.7f - 0.1f * this.getDeltaMovement().horizontalDistance(), 0.3)); + this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * (float)Math.max(0.76f - 0.1f * this.getDeltaMovement().horizontalDistance(), 0.3)); float angle = (float) calculateAngle(this.getDeltaMovement(), this.getViewVector(1)); double s0; @@ -483,7 +483,7 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC this.setRudderRot(Mth.clamp(this.getRudderRot() - this.entityData.get(DELTA_ROT), -0.8f, 0.8f) * 0.75f); if (this.isInWater() || onGround()) { - this.setYRot((float) (this.getYRot() - Math.max(10 * this.getDeltaMovement().horizontalDistance(), 0) * this.getRudderRot() * (this.entityData.get(POWER) > 0 ? 1 : -1))); + this.setYRot((float) (this.getYRot() - Math.max(12 * this.getDeltaMovement().horizontalDistance(), 0) * this.getRudderRot() * (this.entityData.get(POWER) > 0 ? 1 : -1))); this.setDeltaMovement(this.getDeltaMovement().add(Mth.sin(-this.getYRot() * 0.017453292F) * (isInWater() && !onGround() ? 0.3f : 1) * this.entityData.get(POWER), 0.0, Mth.cos(this.getYRot() * 0.017453292F) * (isInWater() && !onGround() ? 0.3f : 1) * this.entityData.get(POWER))); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index c40b6990e..8f4469fb1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -108,6 +108,7 @@ public class ModItems { public static final RegistryObject CLAYMORE_MINE = AMMO.register("claymore_mine", ClaymoreMine::new); public static final RegistryObject HEAVY_AMMO = AMMO.register("heavy_ammo", () -> new Item(new Item.Properties())); public static final RegistryObject ROCKET_70 = AMMO.register("rocket_70", () -> new Item(new Item.Properties())); + public static final RegistryObject SMALL_SHELL = AMMO.register("small_shell", () -> new Item(new Item.Properties())); public static final RegistryObject BEAM_TEST = AMMO.register("beam_test", BeamTest::new); /** @@ -223,10 +224,11 @@ public class ModItems { public static final RegistryObject K_98_BLUEPRINT = ITEMS.register("k_98_blueprint", () -> new BlueprintItem(Rarity.RARE)); public static final RegistryObject MOSIN_NAGANT_BLUEPRINT = ITEMS.register("mosin_nagant_blueprint", () -> new BlueprintItem(Rarity.RARE)); public static final RegistryObject JAVELIN_BLUEPRINT = ITEMS.register("javelin_blueprint", () -> new BlueprintItem(RarityTool.LEGENDARY)); + public static final RegistryObject M_2_HB_BLUEPRINT = ITEMS.register("m2hb_blueprint", () -> new BlueprintItem(Rarity.RARE)); + public static final RegistryObject SECONDARY_CATACLYSM_BLUEPRINT = ITEMS.register("secondary_cataclysm_blueprint", () -> new BlueprintItem(RarityTool.LEGENDARY)); 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 M_2_HB_BLUEPRINT = ITEMS.register("m2hb_blueprint", () -> new BlueprintItem(Rarity.RARE)); /** * Block diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java index e630cdc9f..c069234d0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java @@ -59,6 +59,8 @@ public class ModVillagers { new ItemStack(ModItems.SHOTGUN_AMMO.get(), 2), 16, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), new ItemStack(ModItems.HEAVY_AMMO.get(), 2), 32, 1, 0.05f)); + trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), + new ItemStack(ModItems.SMALL_SHELL.get(), 1), 32, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HANDGUN_AMMO.get(), 8), new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); @@ -70,6 +72,8 @@ public class ModVillagers { new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HEAVY_AMMO.get(), 4), new ItemStack(Items.EMERALD, 1), 64, 2, 0.05f)); + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SMALL_SHELL.get(), 2), + new ItemStack(Items.EMERALD, 1), 64, 2, 0.05f)); // 等级 2 交易 trades.get(2).add(new BasicItemListing(new ItemStack(Items.EMERALD, 10), diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java index a4733bf23..e350ba5a7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleMovementMessage.java @@ -2,8 +2,10 @@ package com.atsuishio.superbwarfare.network.message; import com.atsuishio.superbwarfare.entity.vehicle.MobileVehicleEntity; import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.tools.EntityFindUtil; 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; @@ -34,6 +36,7 @@ public class VehicleMovementMessage { Player player = context.getSender(); var vehicle = player.getVehicle(); + ItemStack stack = player.getMainHandItem(); if (vehicle instanceof MobileVehicleEntity mobileVehicleEntity) { switch (message.direction) { case 0: @@ -58,16 +61,28 @@ public class VehicleMovementMessage { mobileVehicleEntity.decoyInputDown = message.clicked; break; } - - if (player.getMainHandItem().is(ModItems.MONITOR.get())) { - if (player.getMainHandItem().getOrCreateTag().getBoolean("Using") && player.getMainHandItem().getOrCreateTag().getBoolean("Linked")) { - mobileVehicleEntity.leftInputDown = false; - mobileVehicleEntity.rightInputDown = false; - mobileVehicleEntity.forwardInputDown = false; - mobileVehicleEntity.backInputDown = false; - mobileVehicleEntity.upInputDown = false; - mobileVehicleEntity.downInputDown = false; - mobileVehicleEntity.decoyInputDown = false; + } else if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) { + var drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone")); + if (drone != null) { + switch (message.direction) { + case 0: + drone.leftInputDown = message.clicked; + break; + case 1: + drone.rightInputDown = message.clicked; + break; + case 2: + drone.forwardInputDown = message.clicked; + break; + case 3: + drone.backInputDown = message.clicked; + break; + case 4: + drone.upInputDown = message.clicked; + break; + case 5: + drone.downInputDown = message.clicked; + break; } } } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 15096489d..d0e86869c 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -155,6 +155,7 @@ "item.superbwarfare.heavy_ammo": "Heavy Ammo", "item.superbwarfare.lunge_mine": "Lunge Mine", "item.superbwarfare.rocket_70": "70mm Rocket", + "item.superbwarfare.small_shell": "Small Caliber Shells", "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 a5a9d9466..70da90865 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -155,6 +155,7 @@ "item.superbwarfare.heavy_ammo": "重型弹药", "item.superbwarfare.lunge_mine": "突刺爆雷", "item.superbwarfare.rocket_70": "70mm火箭弹", + "item.superbwarfare.small_shell": "小口径炮弹", "block.superbwarfare.container": "集装箱", "des.superbwarfare.container.empty": "空的", diff --git a/src/main/resources/assets/superbwarfare/textures/item/small_shell.png b/src/main/resources/assets/superbwarfare/textures/item/small_shell.png new file mode 100644 index 000000000..5f7a153a6 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/item/small_shell.png differ diff --git a/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_epic.json b/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_epic.json index 03b1c5e8a..de573c797 100644 --- a/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_epic.json +++ b/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_epic.json @@ -270,6 +270,20 @@ } ] }, + { + "type": "minecraft:item", + "name": "superbwarfare:secondary_cataclysm_blueprint", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, { "type": "minecraft:item", "name": "superbwarfare:mk_42_blueprint", diff --git a/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_rare.json b/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_rare.json index 2a649b31b..b7409c031 100644 --- a/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_rare.json +++ b/src/main/resources/data/superbwarfare/loot_tables/chests/blue_print_rare.json @@ -424,6 +424,20 @@ } ] }, + { + "type": "minecraft:item", + "name": "superbwarfare:secondary_cataclysm_blueprint", + "weight": 5, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 1 + } + } + ] + }, { "type": "minecraft:item", "name": "superbwarfare:mk_42_blueprint", diff --git a/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_blueprint_crafting.json b/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_blueprint_crafting.json new file mode 100644 index 000000000..f34a8e9f4 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_blueprint_crafting.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "aba", + "aca", + "aaa" + ], + "key": { + "a": { + "item": "minecraft:diamond" + }, + "b": { + "item": "superbwarfare:secondary_cataclysm_blueprint" + }, + "c": { + "item": "minecraft:lapis_lazuli" + } + }, + "result": { + "item": "superbwarfare:secondary_cataclysm_blueprint", + "count": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_smithing.json b/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_smithing.json new file mode 100644 index 000000000..94715e7a5 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/secondary_cataclysm_smithing.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:smithing_transform", + "template": { + "item": "superbwarfare:secondary_cataclysm_blueprint" + }, + "base": { + "item": "superbwarfare:legendary_material_pack" + }, + "addition": { + "item": "superbwarfare:knife" + }, + "result": { + "item": "superbwarfare:secondary_cataclysm" + } +} \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/recipes/small_shell_crafting.json b/src/main/resources/data/superbwarfare/recipes/small_shell_crafting.json new file mode 100644 index 000000000..f502d39c3 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/small_shell_crafting.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "ea ", + "bcb", + " d " + ], + "key": { + "a": { + "tag":"forge:ingots/steel" + }, + "b": { + "tag": "forge:ingots/copper" + }, + "c": { + "item": "minecraft:gunpowder" + }, + "d": { + "item": "superbwarfare:primer" + }, + "e": { + "item": "superbwarfare:high_energy_explosives" + } + }, + "result": { + "item": "superbwarfare:small_shell", + "count": 4 + } +} \ No newline at end of file