将火炮上的玩家隐藏到火炮内部并免疫伤害,修复阔剑bug
This commit is contained in:
parent
dbd4a7661d
commit
a4057cbfd5
10 changed files with 49 additions and 25 deletions
|
@ -13,5 +13,5 @@ mod_description=A Warfare Mod
|
|||
minecraft_version=1.20.1
|
||||
jei_version=15.2.0.27
|
||||
cloth_config_version=11.1.106
|
||||
mod_version=0.2.9
|
||||
mod_version=0.3.0
|
||||
mod_authors=Atsuishio, Roki27, Light_Quanta
|
|
@ -1,12 +1,12 @@
|
|||
package com.atsuishio.superbwarfare.client.renderer.entity;
|
||||
|
||||
import com.atsuishio.superbwarfare.entity.Mk42Entity;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mk42DamageLayer;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mk42Layer;
|
||||
import com.atsuishio.superbwarfare.entity.model.Mk42Model;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.mojang.math.Axis;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mk42DamageLayer;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
|
@ -19,7 +19,7 @@ public class Mk42Renderer extends GeoEntityRenderer<Mk42Entity> {
|
|||
|
||||
public Mk42Renderer(EntityRendererProvider.Context renderManager) {
|
||||
super(renderManager, new Mk42Model());
|
||||
this.shadowRadius = 3f;
|
||||
this.shadowRadius = 2f;
|
||||
this.addRenderLayer(new Mk42Layer(this));
|
||||
this.addRenderLayer(new Mk42DamageLayer(this));
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package com.atsuishio.superbwarfare.client.renderer.entity;
|
||||
|
||||
import com.atsuishio.superbwarfare.entity.Mle1934Entity;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mle1934DamageLayer;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mle1934Layer;
|
||||
import com.atsuishio.superbwarfare.entity.model.Mle1934Model;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.mojang.math.Axis;
|
||||
import com.atsuishio.superbwarfare.entity.layer.Mle1934DamageLayer;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
|
@ -18,7 +18,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer;
|
|||
public class Mle1934Renderer extends GeoEntityRenderer<Mle1934Entity> {
|
||||
public Mle1934Renderer(EntityRendererProvider.Context renderManager) {
|
||||
super(renderManager, new Mle1934Model());
|
||||
this.shadowRadius = 3f;
|
||||
this.shadowRadius = 2f;
|
||||
this.addRenderLayer(new Mle1934Layer(this));
|
||||
this.addRenderLayer(new Mle1934DamageLayer(this));
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Comparator;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -78,6 +79,9 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
|
|||
return false;
|
||||
if (source.is(DamageTypes.WITHER_SKULL))
|
||||
return false;
|
||||
if (source.is(ModDamageTypes.CUSTOM_EXPLOSION) || source.is(ModDamageTypes.MINE) || source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||
amount *= 0.2f;
|
||||
}
|
||||
|
||||
if (this.level() instanceof ServerLevel serverLevel) {
|
||||
ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 0.2, this.getZ(), 2, 0.02, 0.02, 0.02, 0.1, false);
|
||||
|
@ -168,7 +172,7 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
|
|||
&& target instanceof LivingEntity
|
||||
&& !(target instanceof TargetEntity)
|
||||
&& !(target instanceof Player player && (player.isCreative() || player.isSpectator()))
|
||||
&& (!this.isAlliedTo(target) || target.getTeam() == null || target.getTeam().getName().equals("TDM"))
|
||||
&& (!Objects.requireNonNull(this.getOwner()).isAlliedTo(target) || target.getTeam() == null || target.getTeam().getName().equals("TDM"))
|
||||
&& !target.isShiftKeyDown();
|
||||
if (!condition) continue;
|
||||
|
||||
|
@ -214,8 +218,8 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
|
|||
public void destroy() {
|
||||
if (level() instanceof ServerLevel) {
|
||||
CustomExplosion explosion = new CustomExplosion(this.level(), null,
|
||||
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this), 15.0f,
|
||||
this.getX(), this.getY(), this.getZ(), 7.5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||
ModDamageTypes.causeCustomExplosionDamage(this.level().registryAccess(), null, null), 25.0f,
|
||||
this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||
explosion.explode();
|
||||
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
||||
explosion.finalizeExplosion(false);
|
||||
|
@ -227,7 +231,7 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
|
|||
private void triggerExplode(Entity target) {
|
||||
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
||||
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 140f,
|
||||
target.getX(), target.getY(), target.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||
target.getX(), target.getY(), target.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||
explosion.explode();
|
||||
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
||||
explosion.finalizeExplosion(false);
|
||||
|
|
|
@ -108,7 +108,7 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity {
|
|||
|
||||
@Override
|
||||
public double getPassengersRidingOffset() {
|
||||
return super.getPassengersRidingOffset() - 0.25;
|
||||
return super.getPassengersRidingOffset() - 1.25;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -112,7 +112,7 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity {
|
|||
|
||||
@Override
|
||||
public double getPassengersRidingOffset() {
|
||||
return super.getPassengersRidingOffset() - 0.075;
|
||||
return super.getPassengersRidingOffset() - 1.075;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package com.atsuishio.superbwarfare.entity.projectile;
|
||||
|
||||
import com.atsuishio.superbwarfare.init.*;
|
||||
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig;
|
||||
import com.atsuishio.superbwarfare.entity.AnimatedEntity;
|
||||
import com.atsuishio.superbwarfare.init.*;
|
||||
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
||||
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
|
@ -147,7 +147,7 @@ public class CannonShellEntity extends ThrowableItemProjectile implements GeoEnt
|
|||
float hardness = this.level().getBlockState(BlockPos.containing(x, y, z)).getBlock().defaultDestroyTime();
|
||||
this.durability -= (int) hardness;
|
||||
|
||||
if (ExplosionDestroyConfig.EXPLOSION_DESTROY.get()) {
|
||||
if (ExplosionDestroyConfig.EXPLOSION_DESTROY.get() && hardness != -1 && hardness <= 50) {
|
||||
BlockPos _pos = BlockPos.containing(x, y, z);
|
||||
Block.dropResources(this.level().getBlockState(_pos), this.level(), BlockPos.containing(x, y, z), null);
|
||||
this.level().destroyBlock(_pos, false);
|
||||
|
|
|
@ -616,6 +616,10 @@ public class ClientEventHandler {
|
|||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleWeaponSway(LivingEntity entity) {
|
||||
|
|
|
@ -1,21 +1,22 @@
|
|||
package com.atsuishio.superbwarfare.event;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.config.common.GameplayConfig;
|
||||
import com.atsuishio.superbwarfare.entity.ICannonEntity;
|
||||
import com.atsuishio.superbwarfare.entity.TargetEntity;
|
||||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||
import com.atsuishio.superbwarfare.init.*;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
||||
import com.atsuishio.superbwarfare.network.message.PlayerGunKillMessage;
|
||||
import com.atsuishio.superbwarfare.tools.DamageTypeTool;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||
import com.atsuishio.superbwarfare.config.common.GameplayConfig;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.network.message.DrawClientMessage;
|
||||
import com.atsuishio.superbwarfare.network.message.PlayerGunKillMessage;
|
||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||
import com.atsuishio.superbwarfare.tools.DamageTypeTool;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
|
||||
|
@ -45,11 +46,21 @@ import java.text.DecimalFormat;
|
|||
@Mod.EventBusSubscriber
|
||||
public class LivingEventHandler {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onEntityAttacked(LivingAttackEvent event) {
|
||||
if (event.getEntity().getVehicle() != null && event.getEntity().getVehicle() instanceof ICannonEntity) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onEntityHurt(LivingHurtEvent event) {
|
||||
if (event == null || event.getEntity() == null) {
|
||||
return;
|
||||
}
|
||||
if (event.getEntity().getVehicle() != null && event.getEntity().getVehicle() instanceof ICannonEntity) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
handleGunPerksWhenHurt(event);
|
||||
renderDamageIndicator(event);
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
package com.atsuishio.superbwarfare.mixins;
|
||||
|
||||
import com.atsuishio.superbwarfare.entity.DroneEntity;
|
||||
import com.atsuishio.superbwarfare.entity.ICannonEntity;
|
||||
import com.atsuishio.superbwarfare.entity.Mk42Entity;
|
||||
import com.atsuishio.superbwarfare.entity.Mle1934Entity;
|
||||
import com.atsuishio.superbwarfare.entity.DroneEntity;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
|
@ -41,7 +42,11 @@ public abstract class CameraMixin {
|
|||
if (player != null) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
if (player.getVehicle() != null && mc.player.getVehicle() instanceof ICannonEntity && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
||||
setRotation(player.getViewYRot(partialTicks), player.getViewXRot(partialTicks));
|
||||
setPosition(player.getX(), player.getEyeY() + 1, player.getZ());
|
||||
info.cancel();
|
||||
} else if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
||||
if (drone != null) {
|
||||
|
@ -64,11 +69,11 @@ public abstract class CameraMixin {
|
|||
@Inject(method = "setup", at = @At("TAIL"))
|
||||
public void ia$setup(BlockGetter area, Entity entity, boolean thirdPerson, boolean inverseView, float tickDelta, CallbackInfo ci) {
|
||||
if (thirdPerson && entity.getVehicle() instanceof Mk42Entity) {
|
||||
move(-getMaxZoom(8), 1.0, 0.0);
|
||||
move(-getMaxZoom(8), 2, 0.0);
|
||||
return;
|
||||
}
|
||||
if (thirdPerson && entity.getVehicle() instanceof Mle1934Entity) {
|
||||
move(-getMaxZoom(10), 1.3, 0.0);
|
||||
move(-getMaxZoom(10), 2.3, 0.0);
|
||||
return;
|
||||
}
|
||||
if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && entity instanceof Player player && player.getMainHandItem().is(ModTags.Items.GUN)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue