优化95动画,添加迫击炮射击诸元

This commit is contained in:
Atsuihsio 2024-11-12 02:39:07 +08:00
parent 0392af6b03
commit cd4eb50d7d
28 changed files with 5592 additions and 3164 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-10-20T00:05:58.4595202 Item Models: superbwarfare
// 1.20.1 2024-11-12T02:27:53.4617476 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
@ -21,6 +21,7 @@ fc892b610a110980dbc6f8e2c080672b5dc06e99 assets/superbwarfare/models/item/copper
dd455cf29eed0ef5eb5e90ef3d7140cb8de61efe assets/superbwarfare/models/item/drone.json
831ce33c5a4c90b71a42515f42f16d4c1a946c50 assets/superbwarfare/models/item/empty_perk.json
2419503d8b597c92684d1921895a12fca33fec69 assets/superbwarfare/models/item/epic_material_pack.json
b6f96946b54f44fdd2d8b809945b8d1ae5e776e2 assets/superbwarfare/models/item/firing_parameters.json
c102839d5f7d4bdc1c6cbfbf4c2c907b70f22052 assets/superbwarfare/models/item/fusee.json
5326409e01ffd1f0a6330299799994e267db2b6b assets/superbwarfare/models/item/galena.json
4bf506de247afbbec816f6637030f637e68ce0d4 assets/superbwarfare/models/item/ge_helmet_m_35.json

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "superbwarfare:item/firing_parameters"
}
}

View file

@ -150,6 +150,7 @@ public class ModUtils {
addNetworkMessage(EditModeMessage.class, EditModeMessage::encode, EditModeMessage::decode, EditModeMessage::handler);
addNetworkMessage(EditMessage.class, EditMessage::encode, EditMessage::decode, EditMessage::handler);
addNetworkMessage(SwitchScopeMessage.class, SwitchScopeMessage::encode, SwitchScopeMessage::decode, SwitchScopeMessage::handler);
addNetworkMessage(SetFiringParametersMessage.class, SetFiringParametersMessage::encode, SetFiringParametersMessage::decode, SetFiringParametersMessage::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())));

View file

@ -21,6 +21,7 @@ import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
@ -83,6 +84,9 @@ public class ClickHandler {
event.setCanceled(true);
return;
}
if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0));
}
if (stack.is(ModItems.MONITOR.get())) {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));

View file

@ -160,6 +160,13 @@ public class M4ItemModel extends GeoModel<M4Item> {
shen.setRotY((float) (shen.getRotY() * (1 - (type == 3 ? 0.95 : 0.9) * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt)));
CoreGeoBone flare = getAnimationProcessor().getBone("flare");
int BarrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
if (BarrelType == 1) {
flare.setPosZ(-2);
}
CoreGeoBone l = getAnimationProcessor().getBone("l");
CoreGeoBone r = getAnimationProcessor().getBone("r");
rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0);

View file

@ -15,12 +15,13 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel;
import static net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
public static float fireRotY = 0f;
public static float fireRotZ = 0f;
public static float rotXBipod = 0f;
@Override
public ResourceLocation getAnimationResource(Qbz95Item animatable) {
return ModUtils.loc("animations/qbz95.animation.json");
@ -46,6 +47,8 @@ public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
CoreGeoBone cross1 = getAnimationProcessor().getBone("Cross1");
// CoreGeoBone cross2 = getAnimationProcessor().getBone("Cross2");
// CoreGeoBone cross3 = getAnimationProcessor().getBone("Cross3");
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
CoreGeoBone main = getAnimationProcessor().getBone("0");
Player player = Minecraft.getInstance().player;
if (player == null) return;
@ -80,15 +83,15 @@ public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
default -> 0f;
};
float posZ = switch (type) {
case 0 -> 9f;
case 1 -> 8.9f;
case 0 -> 5.9f;
case 1 -> 5.8f;
case 2 -> 13.01f;
case 3 -> 13.00f;
default -> 0f;
};
float scaleZ = switch (type) {
case 0 -> 0.5f;
case 1 -> 0.51f;
case 0 -> 0.2f;
case 1 -> 0.21f;
case 2 -> 0.692f;
case 3 -> 0.691f;
default -> 0f;
@ -100,7 +103,7 @@ public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
gun.setRotZ((float) (0.05f * zpz));
gun.setScaleZ(1f - (scaleZ * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 3.1));
stack.getOrCreateTag().putBoolean("HoloHidden", gun.getPosX() < 3.1 || main.getRotZ() > 10 * Mth.DEG_TO_RAD);
CoreGeoBone shen;
if (zt < 0.5) {
@ -138,10 +141,23 @@ public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
// cross2.setPosY(-0.7f * (float) fpz);
// cross3.setPosY(-0.2f * (float) fpz);
CoreGeoBone l = getAnimationProcessor().getBone("l");
CoreGeoBone r = getAnimationProcessor().getBone("r");
rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0);
l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
if (stack.getOrCreateTag().getBoolean("HoldOpen")) {
bolt.setPosZ(5f);
}
CoreGeoBone flare = getAnimationProcessor().getBone("flare");
int BarrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
if (BarrelType == 1) {
flare.setPosZ(-2);
}
CoreGeoBone root = getAnimationProcessor().getBone("root");
root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph));
root.setPosY((float) (swayY + movePosY - 40 * ClientEventHandler.drawTime - 2f * vY));
@ -149,11 +165,8 @@ public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
CoreGeoBone main = getAnimationProcessor().getBone("0");
float numR = (float) (1 - 0.92 * zt);
float numP = (float) (1 - 0.88 * zt);
float numR = (float) (1 - 0.88 * zt);
float numP = (float) (1 - 0.95 * zt);
AnimationHelper.handleReloadShakeAnimation(stack, main, camera, numR, numP);
ClientEventHandler.shake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());

View file

@ -100,6 +100,10 @@ public class Qbz95ItemRenderer extends GeoItemRenderer<Qbz95Item> {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 0);
}
if (name.equals("under_rail")) {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.GRIP) == 0);
}
// if (name.equals("Cross2")) {
// bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
// || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS

View file

@ -0,0 +1,41 @@
package net.mcreator.superbwarfare.client.screens;
import net.mcreator.superbwarfare.entity.MortarEntity;
import net.mcreator.superbwarfare.tools.TraceTool;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderGuiEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import java.text.DecimalFormat;
import static net.mcreator.superbwarfare.entity.MortarEntity.PITCH;
import static net.mcreator.superbwarfare.entity.MortarEntity.Y_ROT;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class MortarInfoOverlay {
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
int h = event.getWindow().getGuiScaledHeight();
Player player = Minecraft.getInstance().player;
Entity lookingEntity = null;
if (player != null) {
lookingEntity = TraceTool.findLookingEntity(player, 6);
}
if (lookingEntity instanceof MortarEntity mortar) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.mortar.yaw")
.append(Component.literal(new DecimalFormat("##.#").format(mortar.getEntityData().get(Y_ROT)) + "°")),
w / 2 + 12, h / 2 - 36, -1, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("des.superbwarfare.mortar.pitch")
.append(Component.literal(new DecimalFormat("##.#").format(mortar.getEntityData().get(PITCH)) + "°")),
w / 2 + 12, h / 2 - 28, -1, false);
}
}
}

View file

@ -61,6 +61,7 @@ public class ModItemModelProvider extends ItemModelProvider {
simpleItem(ModItems.RAW_SILVER);
simpleItem(ModItems.SILVER_INGOT);
simpleItem(ModItems.CROWBAR);
simpleItem(ModItems.FIRING_PARAMETERS);
simpleItem(ModItems.TUNGSTEN_ROD);
simpleItem(ModItems.IRON_BARREL);

View file

@ -1,11 +1,13 @@
package net.mcreator.superbwarfare.entity;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.gui.RangeHelper;
import net.mcreator.superbwarfare.entity.projectile.MortarShellEntity;
import net.mcreator.superbwarfare.init.ModEntities;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModParticleTypes;
import net.mcreator.superbwarfare.init.ModSounds;
import net.minecraft.commands.arguments.EntityAnchorArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
@ -27,6 +29,7 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.ThrownPotion;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PlayMessages;
@ -141,6 +144,14 @@ public class MortarEntity extends Entity implements GeoEntity, AnimatedEntity {
@Override
public InteractionResult interact(Player player, InteractionHand hand) {
ItemStack mainHandItem = player.getMainHandItem();
if (player.getMainHandItem().getItem() == ModItems.FIRING_PARAMETERS.get()) {
setTarget(player.getMainHandItem());
player.swing(InteractionHand.MAIN_HAND);
}
if (player.getOffhandItem().getItem() == ModItems.FIRING_PARAMETERS.get()) {
setTarget(player.getOffhandItem());
player.swing(InteractionHand.OFF_HAND);
}
if (player.isShiftKeyDown()) {
if (mainHandItem.getItem() == ModItems.CROWBAR.get()) {
this.discard();
@ -176,6 +187,32 @@ public class MortarEntity extends Entity implements GeoEntity, AnimatedEntity {
return InteractionResult.SUCCESS;
}
public void setTarget(ItemStack stack) {
int targetX = stack.getOrCreateTag().getInt("TargetX");
int targetY = stack.getOrCreateTag().getInt("TargetY");
int targetZ = stack.getOrCreateTag().getInt("TargetZ");
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(targetX, targetY, targetZ));
double[] angles = new double[2];
boolean flag = RangeHelper.canReachTarget(8.0, 0.05, 0.99,
new BlockPos((int) this.getX(), (int) this.getEyeY(), (int) this.getZ()),
new BlockPos(targetX, targetY, targetZ),
angles);
if (flag) {
this.entityData.set(PITCH, (float)angles[1]);
}
}
private void look(EntityAnchorArgument.Anchor pAnchor, Vec3 pTarget) {
Vec3 vec3 = pAnchor.apply(this);
double d0 = (pTarget.x - vec3.x) * 0.2;
double d2 = (pTarget.z - vec3.z) * 0.2;
this.entityData.set(Y_ROT, Mth.wrapDegrees((float) (Mth.atan2(d2, d0) * 57.2957763671875) - 90.0F));
}
@Override
public void lerpTo(double x, double y, double z, float yaw, float pitch, int interpolationSteps, boolean interpolate) {
serverYRot = yaw;

View file

@ -884,9 +884,9 @@ public class ClientEventHandler {
public static void shake(double boneRotX, double boneRotY, double boneRotZ) {
LocalPlayer player = Minecraft.getInstance().player;
if (player != null) {
cameraRot[0] = boneRotX;
cameraRot[1] = boneRotY;
cameraRot[2] = boneRotZ;
cameraRot[0] = -boneRotX;
cameraRot[1] = -boneRotY;
cameraRot[2] = -boneRotZ;
}
}

View file

@ -110,7 +110,7 @@ public class ModItems {
*/
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID);
public static final RegistryObject<Item> TEST_ITEM = ITEMS.register("test_item", TestItem::new);
public static final RegistryObject<Item> FIRING_PARAMETERS = ITEMS.register("firing_parameters", FiringParameters::new);
public static final RegistryObject<Item> SENPAI_SPAWN_EGG = ITEMS.register("senpai_spawn_egg", () -> new ForgeSpawnEggItem(ModEntities.SENPAI, -11584987, -14014413, new Item.Properties()));
public static final RegistryObject<Item> ANCIENT_CPU = ITEMS.register("ancient_cpu", () -> new Item(new Item.Properties().rarity(Rarity.RARE)));

View file

@ -266,6 +266,10 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> QBZ_95_VERYFAR = REGISTRY.register("qbz_95_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "qbz_95_veryfar")));
public static final RegistryObject<SoundEvent> QBZ_95_RELOAD_NORMAL = REGISTRY.register("qbz_95_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "qbz_95_reload_normal")));
public static final RegistryObject<SoundEvent> QBZ_95_RELOAD_EMPTY = REGISTRY.register("qbz_95_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "qbz_95_reload_empty")));
public static final RegistryObject<SoundEvent> QBZ_95_FIRE_1P_S = REGISTRY.register("qbz_95_fire_1p_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "qbz_95_fire_1p_s")));
public static final RegistryObject<SoundEvent> QBZ_95_FIRE_3P_S = REGISTRY.register("qbz_95_fire_3p_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "qbz_95_fire_3p_s")));
public static final RegistryObject<SoundEvent> QBZ_95_FAR_S = REGISTRY.register("qbz_95_far_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_12_far_s")));
public static final RegistryObject<SoundEvent> QBZ_95_VERYFAR_S = REGISTRY.register("qbz_95_veryfar_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_12_veryfar_s")));
public static final RegistryObject<SoundEvent> K_98_FIRE_1P = REGISTRY.register("k_98_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "k_98_fire_1p")));
public static final RegistryObject<SoundEvent> K_98_FIRE_3P = REGISTRY.register("k_98_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "k_98_fire_3p")));

View file

@ -0,0 +1,47 @@
package net.mcreator.superbwarfare.item;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class FiringParameters extends Item {
public FiringParameters() {
super(new Properties().stacksTo(1));
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
ItemStack stack = pContext.getItemInHand();
BlockPos pos = pContext.getClickedPos();
pos = pos.relative(pContext.getClickedFace());
Player player = pContext.getPlayer();
if (player == null) return InteractionResult.PASS;
if (player.isShiftKeyDown()) {
stack.getOrCreateTag().putInt("TargetX", pos.getX());
stack.getOrCreateTag().putInt("TargetY", pos.getY());
stack.getOrCreateTag().putInt("TargetZ", pos.getZ());
}
return InteractionResult.SUCCESS;
}
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents, TooltipFlag pIsAdvanced) {
pTooltipComponents.add(Component.translatable("des.superbwarfare.target.pos").withStyle(ChatFormatting.GRAY)
.append(Component.literal("[" + pStack.getOrCreateTag().getInt("TargetX")
+ "," + pStack.getOrCreateTag().getInt("TargetY")
+ "," + pStack.getOrCreateTag().getInt("TargetZ") + "]")));
}
}

View file

@ -1,60 +0,0 @@
package net.mcreator.superbwarfare.item;
import net.mcreator.superbwarfare.client.gui.RangeHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class TestItem extends Item {
public TestItem() {
super(new Properties().stacksTo(1));
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
ItemStack stack = pContext.getItemInHand();
BlockPos pos = pContext.getClickedPos();
pos = pos.relative(pContext.getClickedFace());
Player player = pContext.getPlayer();
if (player == null) return InteractionResult.PASS;
if (player.isShiftKeyDown()) {
stack.getOrCreateTag().putInt("StartX", pos.getX());
stack.getOrCreateTag().putInt("StartY", pos.getY());
stack.getOrCreateTag().putInt("StartZ", pos.getZ());
return InteractionResult.SUCCESS;
} else {
stack.getOrCreateTag().putInt("TargetX", pos.getX());
stack.getOrCreateTag().putInt("TargetY", pos.getY());
stack.getOrCreateTag().putInt("TargetZ", pos.getZ());
}
return InteractionResult.SUCCESS;
}
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents, TooltipFlag pIsAdvanced) {
pTooltipComponents.add(Component.literal("Start Pos: [" + pStack.getOrCreateTag().getInt("StartX") + ","
+ pStack.getOrCreateTag().getInt("StartY") + "," + pStack.getOrCreateTag().getInt("StartZ") + "]"));
pTooltipComponents.add(Component.literal("Target Pos: [" + pStack.getOrCreateTag().getInt("TargetX") + ","
+ pStack.getOrCreateTag().getInt("TargetY") + "," + pStack.getOrCreateTag().getInt("TargetZ") + "]"));
double[] angles = new double[2];
boolean flag = RangeHelper.canReachTarget(8.0, 0.05, 0.99,
new BlockPos(pStack.getOrCreateTag().getInt("StartX"), pStack.getOrCreateTag().getInt("StartY"), pStack.getOrCreateTag().getInt("StartZ")),
new BlockPos(pStack.getOrCreateTag().getInt("TargetX"), pStack.getOrCreateTag().getInt("TargetY"), pStack.getOrCreateTag().getInt("TargetZ")),
angles);
pTooltipComponents.add(Component.literal(flag + " Angles: " + angles[0] + "," + angles[1]));
}
}

View file

@ -17,6 +17,7 @@ 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.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.InteractionHand;
@ -167,11 +168,12 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem {
int magType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE);
int stockType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.STOCK);
int customMag = switch (magType) {
case 1 -> 15;
case 2 -> 30;
default -> 0;
};
if (magType == 1) {
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
tag.putInt("Magazine", 2);
}
int customMag = magType == 2 ? 30 : 0;
double customZoom = switch (scopeType) {
case 0, 1 -> 0;

View file

@ -2,9 +2,15 @@ package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.entity.DroneEntity;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.tools.TraceTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
@ -32,15 +38,44 @@ public class DroneFireMessage {
Player player = context.getSender();
ItemStack stack = player.getMainHandItem();
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (message.type == 0) {
if (!player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
drone.getPersistentData().putBoolean("firing", true);
} else {
ItemStack offStack = player.getOffhandItem();
boolean lookAtEntity = false;
Entity lookingEntity = TraceTool.findLookingEntity(drone, 520);
Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(drone.getEyePosition(), drone.getEyePosition().add(drone.getLookAngle().scale(512)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos());
if (lookingEntity != null) {
lookAtEntity = true;
}
if (lookAtEntity) {
offStack.getOrCreateTag().putInt("TargetX", (int) lookingEntity.getX());
offStack.getOrCreateTag().putInt("TargetY", (int) lookingEntity.getY());
offStack.getOrCreateTag().putInt("TargetZ", (int) lookingEntity.getZ());
} else {
offStack.getOrCreateTag().putInt("TargetX", (int) looking.x());
offStack.getOrCreateTag().putInt("TargetY", (int) looking.y());
offStack.getOrCreateTag().putInt("TargetZ", (int) looking.z());
}
player.displayClientMessage(Component.translatable("des.superbwarfare.target.pos").withStyle(ChatFormatting.GRAY)
.append(Component.literal("[" + offStack.getOrCreateTag().getInt("TargetX")
+ "," + offStack.getOrCreateTag().getInt("TargetY")
+ "," + offStack.getOrCreateTag().getInt("TargetZ") + "]")), true);
}
}
}
}
}
});
context.setPacketHandled(true);

View file

@ -0,0 +1,69 @@
package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.tools.TraceTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class SetFiringParametersMessage {
private final int type;
public SetFiringParametersMessage(int type) {
this.type = type;
}
public static SetFiringParametersMessage decode(FriendlyByteBuf buffer) {
return new SetFiringParametersMessage(buffer.readInt());
}
public static void encode(SetFiringParametersMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
}
public static void handler(SetFiringParametersMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
Player player = context.getSender();
ItemStack stack = player.getOffhandItem();
boolean lookAtEntity = false;
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(512)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos());
if (lookingEntity != null) {
lookAtEntity = true;
}
if (lookAtEntity) {
stack.getOrCreateTag().putInt("TargetX", (int) lookingEntity.getX());
stack.getOrCreateTag().putInt("TargetY", (int) lookingEntity.getY());
stack.getOrCreateTag().putInt("TargetZ", (int) lookingEntity.getZ());
} else {
stack.getOrCreateTag().putInt("TargetX", (int) looking.x());
stack.getOrCreateTag().putInt("TargetY", (int) looking.y());
stack.getOrCreateTag().putInt("TargetZ", (int) looking.z());
}
player.displayClientMessage(Component.translatable("des.superbwarfare.target.pos").withStyle(ChatFormatting.GRAY)
.append(Component.literal("[" + stack.getOrCreateTag().getInt("TargetX")
+ "," + stack.getOrCreateTag().getInt("TargetY")
+ "," + stack.getOrCreateTag().getInt("TargetZ") + "]")), true);
}
});
context.setPacketHandled(true);
}
}

File diff suppressed because it is too large Load diff

View file

@ -148,6 +148,7 @@
"item.superbwarfare.ap_5_inches": "AP Shell",
"item.superbwarfare.javelin_missile": "Javelin Missile",
"item.superbwarfare.firing_parameters": "Firing Parameters",
"item.superbwarfare.ancient_cpu": "Ancient CPU",
"item.superbwarfare.target_deployer": "Target",
"item.superbwarfare.senpai_spawn_egg": "Senpai Spawn Egg",
@ -409,5 +410,8 @@
"des.superbwarfare.perk_damage_plus": "Damage +",
"des.superbwarfare.perk_speed_reduce": "Velocity -",
"des.superbwarfare.perk_speed_plus": "Velocity +",
"des.superbwarfare.perk_slug": "Slug"
"des.superbwarfare.perk_slug": "Slug",
"des.superbwarfare.mortar.yaw": "Yaw",
"des.superbwarfare.mortar.pitch": "Pitch",
"des.superbwarfare.target.pos": "Target Position"
}

View file

@ -148,6 +148,8 @@
"item.superbwarfare.ap_5_inches": "穿甲弹",
"item.superbwarfare.javelin_missile": "标枪导弹",
"item.superbwarfare.firing_parameters": "射击诸元",
"item.superbwarfare.ancient_cpu": "古代处理器",
"item.superbwarfare.target_deployer": "标靶",
"item.superbwarfare.senpai_spawn_egg": "野兽先辈刷怪蛋",
@ -409,5 +411,9 @@
"des.superbwarfare.perk_damage_plus": "伤害 +",
"des.superbwarfare.perk_speed_reduce": "子弹初速 -",
"des.superbwarfare.perk_speed_plus": "子弹初速 +",
"des.superbwarfare.perk_slug": "独头弹"
"des.superbwarfare.perk_slug": "独头弹",
"des.superbwarfare.mortar.yaw": "水平朝向:",
"des.superbwarfare.mortar.pitch": "俯仰角度:",
"des.superbwarfare.target.pos": "目标坐标:"
}

View file

@ -1393,6 +1393,14 @@
}
]
},
"qbz_95_fire_1p_s": {
"sounds": [
{
"name": "superbwarfare:qbz95/qbz95_fire1p_s",
"stream": false
}
]
},
"qbz_95_fire_3p": {
"sounds": [
{
@ -1401,6 +1409,14 @@
}
]
},
"qbz_95_fire_3p_s": {
"sounds": [
{
"name": "superbwarfare:qbz95/qbz95_fire3p_s",
"stream": false
}
]
},
"qbz_95_far": {
"sounds": [
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 64 KiB