优化95动画,添加迫击炮射击诸元
This commit is contained in:
parent
0392af6b03
commit
cd4eb50d7d
28 changed files with 5592 additions and 3164 deletions
|
@ -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
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "superbwarfare:item/firing_parameters"
|
||||
}
|
||||
}
|
|
@ -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())));
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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")));
|
||||
|
|
|
@ -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") + "]")));
|
||||
}
|
||||
}
|
|
@ -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]));
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
File diff suppressed because it is too large
Load diff
|
@ -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:"
|
||||
}
|
|
@ -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": "目标坐标:"
|
||||
}
|
|
@ -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.
Binary file not shown.
Binary file not shown.
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 |
Loading…
Add table
Reference in a new issue