From 433c5b0e05cf421e5d10ff43427e0a73de821aba Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 1 Dec 2024 23:41:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E7=A7=BB=E6=A4=8D=E4=BA=86?= =?UTF-8?q?=E6=BF=80=E5=85=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../renderer/entity/LaserEntityRenderer.java | 6 +- .../entity/projectile/LaserEntity.java | 4 +- .../event/ClientEventHandler.java | 20 +++---- .../superbwarfare/item/BeamTest.java | 56 +++++++++++++----- .../textures/entity/temp_laser.png | Bin 0 -> 2547 bytes 5 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/textures/entity/temp_laser.png diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/LaserEntityRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/LaserEntityRenderer.java index 3e56e4131..dd5c0f042 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/LaserEntityRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/LaserEntityRenderer.java @@ -26,7 +26,7 @@ public class LaserEntityRenderer extends AbstractLaserEntityRenderer type, Level level) { - super(type, level, 0); + super(type, level, 1); } public LaserEntity(Level level, LivingEntity caster, double x, double y, double z, float yaw, float pitch, int duration) { - super(ModEntities.LASER.get(), level, 0); + super(ModEntities.LASER.get(), level, 1); this.caster = caster; this.setYaw(yaw); this.setPitch(pitch); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 0eb0aee81..cdf6e4b51 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -350,7 +350,7 @@ public class ClientEventHandler { } public static void beamShoot(Player player, ItemStack stack) { - if (stack.is(ModItems.BEAM_TEST.get()) && stack.getOrCreateTag().getBoolean("Using")) { + if (stack.is(ModItems.BEAM_TEST.get()) && stack.getOrCreateTag().getBoolean("LaserFiring")) { Entity lookingEntity = TraceTool.laserfindLookingEntity(player, 512); if (player.isCrouching()) { @@ -466,7 +466,7 @@ public class ClientEventHandler { randomShell[2] = (0.7 + (Math.random() - 0.5)); } - public static void handleShakeClient(double time, double radius, double amplitude, double x, double y,double z, Supplier ctx) { + public static void handleShakeClient(double time, double radius, double amplitude, double x, double y, double z, Supplier ctx) { if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { Player player = Minecraft.getInstance().player; if (player == null) return; @@ -619,18 +619,16 @@ public class ClientEventHandler { shakeTime = Mth.lerp(0.25 * times, shakeTime, 0); if (player != null && shakeTime > 0) { - shakeRadiusAmplitude = (float) Mth.clamp(1 - player.position().distanceTo(new Vec3(shakePos[0], shakePos[1], shakePos[2])) / shakeRadius, 0 ,1); - -// player.displayClientMessage(Component.literal(new java.text.DecimalFormat("##.##").format(shakeRadiusAmplitude)), true); + shakeRadiusAmplitude = (float) Mth.clamp(1 - player.position().distanceTo(new Vec3(shakePos[0], shakePos[1], shakePos[2])) / shakeRadius, 0, 1); if (shakeType > 0) { - event.setYaw((float) (yaw + (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * 0.75 * shakeType))); - event.setPitch((float) (pitch - (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType))); - event.setRoll((float) (roll - (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude))); + event.setYaw((float) (yaw + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * 0.75 * shakeType))); + event.setPitch((float) (pitch - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType))); + event.setRoll((float) (roll - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude))); } else { - event.setYaw((float) (yaw - (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * 0.75 * shakeType))); - event.setPitch((float) (pitch + (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType))); - event.setRoll((float) (roll + (shakeTime * Math.sin(0.5 *Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude))); + event.setYaw((float) (yaw - (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * 0.75 * shakeType))); + event.setPitch((float) (pitch + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude * shakeType))); + event.setRoll((float) (roll + (shakeTime * Math.sin(0.5 * Math.PI * shakeTime) * shakeAmplitude * shakeRadiusAmplitude))); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java index bc5ea9a3a..922169f2b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java @@ -1,14 +1,19 @@ package com.atsuishio.superbwarfare.item; +import com.atsuishio.superbwarfare.capability.LaserCapability; +import com.atsuishio.superbwarfare.capability.LaserHandler; +import com.atsuishio.superbwarfare.capability.ModCapabilities; +import com.atsuishio.superbwarfare.entity.projectile.LaserEntity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; public class BeamTest extends Item { + public BeamTest() { super(new Properties()); } @@ -17,23 +22,46 @@ public class BeamTest extends Item { public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (!stack.getOrCreateTag().getBoolean("Using")) { - stack.getOrCreateTag().putBoolean("Using", true); - player.getCooldowns().addCooldown(this, 10); - } else { - stack.getOrCreateTag().putBoolean("Using", false); - } + player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(capability -> { + player.startUsingItem(hand); - return InteractionResultHolder.consume(stack); + if (!level.isClientSide) { + double px = player.getX(); + double py = player.getY() + player.getBbHeight() * 0.6F; + double pz = player.getZ(); + float yHeadRotAngle = (float) Math.toRadians(player.yHeadRot + 90); + float xHeadRotAngle = (float) (float) -Math.toRadians(player.getXRot()); + LaserEntity laserEntity = new LaserEntity(player.level(), player, px, py, pz, yHeadRotAngle, xHeadRotAngle, 6000); + capability.init(new LaserHandler(player, laserEntity, 0)); + capability.start(); + + stack.getOrCreateTag().putBoolean("LaserFiring", true); + } + }); + + return InteractionResultHolder.consume(player.getItemInHand(hand)); } @Override - public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) { - super.inventoryTick(itemstack, world, entity, slot, selected); - if (!selected) { - if (itemstack.getOrCreateTag().getBoolean("Using")) { - itemstack.getOrCreateTag().putBoolean("Using", false); - } + public void releaseUsing(ItemStack stack, Level level, LivingEntity livingEntity, int timeCharged) { + if (livingEntity instanceof Player player) { + player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::stop); + stack.getOrCreateTag().putBoolean("LaserFiring", false); } + super.releaseUsing(stack, level, livingEntity, timeCharged); + } + + @Override + public ItemStack finishUsingItem(ItemStack pStack, Level pLevel, LivingEntity pLivingEntity) { + if (pLivingEntity instanceof Player player) { + player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::stop); + pStack.getOrCreateTag().putBoolean("LaserFiring", false); + } + return super.finishUsingItem(pStack, pLevel, pLivingEntity); + } + + @Override + public int getUseDuration(ItemStack stack) { + return 6000; } } diff --git a/src/main/resources/assets/superbwarfare/textures/entity/temp_laser.png b/src/main/resources/assets/superbwarfare/textures/entity/temp_laser.png new file mode 100644 index 0000000000000000000000000000000000000000..40353a7df70158fc45a37b5617d557afa4b43f6b GIT binary patch literal 2547 zcmcImeNYtl8Qwbu1&T;ff@tEpUNGWYwIDpe zngRtz%tYsKI*3;~7J}U|NlUTgY2p)xxG)DIlSqY-CV)octD$!LB%0-7b9pc0dViLf zP0e$V$QqKRa~PbA%_S)=WWpJNPued110iR}L%9(X5qzNgR`p zC!=v_^$dw|G?PlxSrdgyo?rp>dZ92HFl@bzB4{VOL=ZJ@LmDuS)Iq2eRlqV7mdaA4 zs1}Xnj|iz+E0vBxjeIK*7>7*_OcOS9-c+DQqc(wJIgG-|1cMIZMM-QnLTkb_n9QV< z!kAL2gh`V^1*>tT3RcNg=18SRZkD3>s4m{#K;t<=1_k@E&LwD^=a@{A)~ryN2^3Sq zC?+RhoK&E&iIizz8ICGsN{vj0D>M^q?=Uw0<-xLk$||TLct*2aCMR$Lg)y~^fR%zO z43AX9O10W7H${?|iBLiyfosh)W5@VbvDq;Ti8v?=1pcT-PiN7LktX<@%Y}yK+4(5q zZ7g5Cyzy5gh0GpbW!b>dzSCm3(C#`27wSwB(D-fJ&tz|EI>%_8R+1-uMe)aAEN$kT z7(=eG@R^=Ue<3f^&tkc+RzJ1c|9{nwCl|M3l!fFcC;|!bAi}H}D-H6$RU3Wwleshj z=ZBrJoSd@!W^zuG6i?0YQ`oQz-VXrNE+!aOq`Jz7y6ULlRdZ(Cf6-k#*rYd|Pssf} zxVrGexu4yJnCddy)o(mp6;VZ%`9%t<&+Hve`7iQVb6D;FPitT3^3aSwWDu6^^@Vjo z{Z%jixZ_!)<`?@~A9VJlW4lHE18titHv#^i%$g6Z-lM79)NpRsIrjh_;qInR5wJn^ z^>k_MwX(#KiwoK{LzyF@hS2B>x8shk-O%Ng>3-30wnPMmdAxaVCEM7go?E%4;6^v) z9T?s7+A2G+vw7#)nT?l5E?utP{r~`a>Bsw-6KV4bE;PIEga8fCPv_6^i9Kdo9D|h4 zTN*XLkMSRl?o$1&z5Sc2?7D?@3d&J_vi@6rqjyogk2-3Z;(AN?@sP%ibg{LxLJ9aD z46O1|rI>u}=Y9QvrLnz3f37*Y%`==@T-KH2JYpj6W#p6}I@s5L zKjhhG1(+Bpym@THxxl;e?)LmIsIyIPa|ib2&&oXF*+)OF+9^uMXY_CLdb@sCzVwaW zOYMlMwd=sVj$Ikz$2r|}{cC&0=bu0N+_g3@$DWu`v*`6D$3s@XmnN?>A$IY)!J-qo zlcK`k?0FVFTsnBeXa~}ppWCX_nVyH;c}!wd9I*V(neB(?G$aMIF}0^YbU&GS;q;*AKd7=8I={TXl5uWH1b zofW$NwLoHEcCxp*Y4g^Wi1mvC)BW7&N&B=fe1GSmqpPp5rJw$_$8fEz1F#Ns0Q(5H z*N#C+m1y=rP>uN3krVT?eWX1RtPu!bcenVk->qeiy^A*l$RCL|-b|sZIzG>b&c#U* zfrM%wP?wV5|L?4&9vwkR9)^NLoH)4}z25S!w(p(VO1Klmhu;mj-g0lF>gH_s4}HM$ zjG8j;czkZfyjm~wNO91r6`d8CA0Jq|V^dh_$sJs%pI^yy>D}pkFI9Zf6tebuHqc`u1ALhLHZk^Fk^TAV~gxNiM@+}N&?htk_Uwj+g7WDU_1?#^2 QTKFtWh)pt_ipl)ozqL-aMgRZ+ literal 0 HcmV?d00001