添加无人机的投弹功能
This commit is contained in:
parent
d4dbd87637
commit
59de873d91
12 changed files with 303 additions and 11 deletions
|
@ -105,12 +105,14 @@ public class TargetMod {
|
||||||
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
||||||
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
|
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
|
||||||
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
|
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
|
||||||
|
|
||||||
addNetworkMessage(DroneMoveLeftMessage.class, DroneMoveLeftMessage::encode, DroneMoveLeftMessage::decode, DroneMoveLeftMessage::handler);
|
addNetworkMessage(DroneMoveLeftMessage.class, DroneMoveLeftMessage::encode, DroneMoveLeftMessage::decode, DroneMoveLeftMessage::handler);
|
||||||
addNetworkMessage(DroneMoveRightMessage.class, DroneMoveRightMessage::encode, DroneMoveRightMessage::decode, DroneMoveRightMessage::handler);
|
addNetworkMessage(DroneMoveRightMessage.class, DroneMoveRightMessage::encode, DroneMoveRightMessage::decode, DroneMoveRightMessage::handler);
|
||||||
addNetworkMessage(DroneMoveForwardMessage.class, DroneMoveForwardMessage::encode, DroneMoveForwardMessage::decode, DroneMoveForwardMessage::handler);
|
addNetworkMessage(DroneMoveForwardMessage.class, DroneMoveForwardMessage::encode, DroneMoveForwardMessage::decode, DroneMoveForwardMessage::handler);
|
||||||
addNetworkMessage(DroneMoveBackwardMessage.class, DroneMoveBackwardMessage::encode, DroneMoveBackwardMessage::decode, DroneMoveBackwardMessage::handler);
|
addNetworkMessage(DroneMoveBackwardMessage.class, DroneMoveBackwardMessage::encode, DroneMoveBackwardMessage::decode, DroneMoveBackwardMessage::handler);
|
||||||
addNetworkMessage(DroneMoveUpMessage.class, DroneMoveUpMessage::encode, DroneMoveUpMessage::decode, DroneMoveUpMessage::handler);
|
addNetworkMessage(DroneMoveUpMessage.class, DroneMoveUpMessage::encode, DroneMoveUpMessage::decode, DroneMoveUpMessage::handler);
|
||||||
addNetworkMessage(DroneMoveDownMessage.class, DroneMoveDownMessage::encode, DroneMoveDownMessage::decode, DroneMoveDownMessage::handler);
|
addNetworkMessage(DroneMoveDownMessage.class, DroneMoveDownMessage::encode, DroneMoveDownMessage::decode, DroneMoveDownMessage::handler);
|
||||||
|
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
|
||||||
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
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), TargetModPotion.SHOCK.get())));
|
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), TargetModPotion.SHOCK.get())));
|
||||||
|
|
|
@ -5,6 +5,7 @@ import net.mcreator.target.TargetMod;
|
||||||
import net.mcreator.target.client.gui.RangeHelper;
|
import net.mcreator.target.client.gui.RangeHelper;
|
||||||
import net.mcreator.target.entity.Mk42Entity;
|
import net.mcreator.target.entity.Mk42Entity;
|
||||||
import net.mcreator.target.entity.MortarEntity;
|
import net.mcreator.target.entity.MortarEntity;
|
||||||
|
import net.mcreator.target.init.TargetModItems;
|
||||||
import net.mcreator.target.init.TargetModKeyMappings;
|
import net.mcreator.target.init.TargetModKeyMappings;
|
||||||
import net.mcreator.target.init.TargetModMobEffects;
|
import net.mcreator.target.init.TargetModMobEffects;
|
||||||
import net.mcreator.target.init.TargetModTags;
|
import net.mcreator.target.init.TargetModTags;
|
||||||
|
@ -62,6 +63,7 @@ public class ClickHandler {
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
int button = event.getButton();
|
int button = event.getButton();
|
||||||
|
|
||||||
|
@ -70,6 +72,10 @@ public class ClickHandler {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (stack.is(TargetModItems.MONITOR.get())) {
|
||||||
|
event.setCanceled(true);
|
||||||
|
TargetMod.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));
|
||||||
|
}
|
||||||
if (player.getVehicle() != null && player.getVehicle() instanceof Mk42Entity) {
|
if (player.getVehicle() != null && player.getVehicle() instanceof Mk42Entity) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
TargetMod.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0));
|
TargetMod.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0));
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package net.mcreator.target.client.renderer.entity;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
import com.mojang.math.Axis;
|
||||||
|
import net.mcreator.target.client.model.entity.ModelGrenade;
|
||||||
|
import net.mcreator.target.entity.DroneGrenadeEntity;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
|
||||||
|
public class DroneGrenadeRenderer extends EntityRenderer<DroneGrenadeEntity> {
|
||||||
|
private static final ResourceLocation texture = new ResourceLocation("target:textures/entity/grenade.png");
|
||||||
|
private final ModelGrenade<DroneGrenadeEntity> model;
|
||||||
|
|
||||||
|
public DroneGrenadeRenderer(EntityRendererProvider.Context context) {
|
||||||
|
super(context);
|
||||||
|
model = new ModelGrenade<>(context.bakeLayer(ModelGrenade.LAYER_LOCATION));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(DroneGrenadeEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
|
||||||
|
VertexConsumer vb = bufferIn.getBuffer(RenderType.entityCutout(this.getTextureLocation(entityIn)));
|
||||||
|
poseStack.pushPose();
|
||||||
|
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()) - 90));
|
||||||
|
poseStack.mulPose(Axis.ZP.rotationDegrees(90 + Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())));
|
||||||
|
model.renderToBuffer(poseStack, vb, packedLightIn, OverlayTexture.NO_OVERLAY, 1, 1, 1, 0.0625f);
|
||||||
|
poseStack.popPose();
|
||||||
|
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getTextureLocation(DroneGrenadeEntity entity) {
|
||||||
|
return texture;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,13 @@
|
||||||
|
|
||||||
package net.mcreator.target.entity;
|
package net.mcreator.target.entity;
|
||||||
|
|
||||||
import net.mcreator.target.init.TargetModItems;
|
import net.mcreator.target.init.*;
|
||||||
|
import net.mcreator.target.item.common.ammo.CannonShellItem;
|
||||||
|
import net.mcreator.target.tools.SoundTool;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.commands.CommandSource;
|
||||||
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
@ -14,6 +19,7 @@ import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.*;
|
import net.minecraft.world.entity.*;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
@ -44,7 +50,6 @@ import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
|
||||||
import net.mcreator.target.init.TargetModEntities;
|
|
||||||
import net.mcreator.target.item.Monitor;
|
import net.mcreator.target.item.Monitor;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -57,6 +62,7 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
||||||
private float moveX = 0;
|
private float moveX = 0;
|
||||||
private float moveY = 0;
|
private float moveY = 0;
|
||||||
private float moveZ = 0;
|
private float moveZ = 0;
|
||||||
|
private boolean move = false;
|
||||||
|
|
||||||
|
|
||||||
public String animationprocedure = "empty";
|
public String animationprocedure = "empty";
|
||||||
|
@ -184,17 +190,59 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LivingEntity control = this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(512))
|
||||||
|
.stream().filter(e -> e.getStringUUID().equals(this.entityData.get(CONTROLLER))).findFirst().orElse(null);
|
||||||
|
|
||||||
|
if (this.getPersistentData().getBoolean("left")
|
||||||
|
|| this.getPersistentData().getBoolean("right")
|
||||||
|
|| this.getPersistentData().getBoolean("forward")
|
||||||
|
|| this.getPersistentData().getBoolean("backward")
|
||||||
|
|| this.getPersistentData().getBoolean("up")
|
||||||
|
|| this.getPersistentData().getBoolean("down")) {
|
||||||
|
move = true;
|
||||||
|
} else {
|
||||||
|
move = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (move || !this.onGround()) {
|
||||||
|
this.level().playSound(null, this.getOnPos(), TargetModSounds.DRONE_SOUND.get(), SoundSource.AMBIENT, 3, 1);
|
||||||
|
if (control != null) {
|
||||||
|
ItemStack stack = control.getMainHandItem();
|
||||||
|
if (stack.getOrCreateTag().getBoolean("Using") && control instanceof ServerPlayer serverPlayer) {
|
||||||
|
SoundTool.playLocalSound(serverPlayer, TargetModSounds.DRONE_SOUND.get(), 100, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Vec3 vec = this.getDeltaMovement();
|
Vec3 vec = this.getDeltaMovement();
|
||||||
|
|
||||||
double x = vec.x;
|
if (this.getDeltaMovement().horizontalDistanceSqr() < 1) {
|
||||||
double y = vec.y;
|
if (move) {
|
||||||
double z = vec.z;
|
this.setDeltaMovement(vec.multiply(1.04, 1, 1.04));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setDeltaMovement(Mth.clamp(1.06 * x ,-0.95,0.95), y, Mth.clamp(1.06 * z,-0.95,0.95));
|
if (this.getPersistentData().getBoolean("firing")) {
|
||||||
|
if (control instanceof Player player) {
|
||||||
|
DroneDrop(player);
|
||||||
|
}
|
||||||
|
this.getPersistentData().putBoolean("firing",false);
|
||||||
|
}
|
||||||
|
|
||||||
this.refreshDimensions();
|
this.refreshDimensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DroneDrop(Player player) {
|
||||||
|
|
||||||
|
Level level = player.level();
|
||||||
|
if (!level.isClientSide()) {
|
||||||
|
DroneGrenadeEntity droneGrenadeEntity = new DroneGrenadeEntity(player, level);
|
||||||
|
droneGrenadeEntity.setPos(this.getX(), this.getY(), this.getZ());
|
||||||
|
droneGrenadeEntity.shoot(0, -1, 0, 0,0.5f);
|
||||||
|
level.addFreshEntity(droneGrenadeEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
||||||
super.mobInteract(player, hand);
|
super.mobInteract(player, hand);
|
||||||
|
@ -254,18 +302,24 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
||||||
if (control != null) {
|
if (control != null) {
|
||||||
ItemStack stack = control.getMainHandItem();
|
ItemStack stack = control.getMainHandItem();
|
||||||
if (stack.getOrCreateTag().getBoolean("Using")) {
|
if (stack.getOrCreateTag().getBoolean("Using")) {
|
||||||
this.setYRot(control.getYRot());
|
this.setYRot(control.getYRot() + 180);
|
||||||
this.yRotO = this.getYRot();
|
this.yRotO = this.getYRot();
|
||||||
this.setXRot(Mth.clamp(control.getXRot(),-25,95));
|
this.setXRot(Mth.clamp(control.getXRot(),-25,95));
|
||||||
this.setRot(this.getYRot(), this.getXRot());
|
this.setRot(this.getYRot(), this.getXRot());
|
||||||
this.yBodyRot = control.getYRot();
|
this.yBodyRot = control.getYRot() + 180;
|
||||||
this.yHeadRot = control.getYRot();
|
this.yHeadRot = control.getYRot() + 180;
|
||||||
this.setMaxUpStep(1.0F);
|
this.setMaxUpStep(1.0F);
|
||||||
this.setSpeed(4 * (float)this.getAttributeValue(Attributes.MOVEMENT_SPEED));
|
this.setSpeed(4 * (float)this.getAttributeValue(Attributes.MOVEMENT_SPEED));
|
||||||
float forward = -moveZ;
|
float forward = -moveZ;
|
||||||
float upDown = -moveY;
|
float upDown = -moveY;
|
||||||
float strafe = -moveX;
|
float strafe = -moveX;
|
||||||
super.travel(new Vec3(strafe, upDown, forward));
|
super.travel(new Vec3(2 * strafe, 2 * upDown, 2 * forward));
|
||||||
|
Vec3 vec3 = this.getDeltaMovement();
|
||||||
|
if (!move) {
|
||||||
|
this.setDeltaMovement(vec3.multiply(0.9, 0.8, 0.9));
|
||||||
|
} else {
|
||||||
|
this.setDeltaMovement(vec3.multiply(1.05, 0.99, 1.05));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
117
src/main/java/net/mcreator/target/entity/DroneGrenadeEntity.java
Normal file
117
src/main/java/net/mcreator/target/entity/DroneGrenadeEntity.java
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
package net.mcreator.target.entity;
|
||||||
|
|
||||||
|
import net.mcreator.target.TargetMod;
|
||||||
|
import net.mcreator.target.init.TargetModDamageTypes;
|
||||||
|
import net.mcreator.target.init.TargetModEntities;
|
||||||
|
import net.mcreator.target.init.TargetModItems;
|
||||||
|
import net.mcreator.target.init.TargetModSounds;
|
||||||
|
import net.mcreator.target.network.message.ClientIndicatorMessage;
|
||||||
|
import net.mcreator.target.tools.CustomExplosion;
|
||||||
|
import net.mcreator.target.tools.ParticleTool;
|
||||||
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
import net.minecraft.network.protocol.Packet;
|
||||||
|
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.sounds.SoundSource;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.level.Explosion;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
|
import net.minecraft.world.phys.EntityHitResult;
|
||||||
|
import net.minecraftforge.network.NetworkHooks;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
|
import net.minecraftforge.network.PlayMessages;
|
||||||
|
|
||||||
|
public class DroneGrenadeEntity extends ThrowableItemProjectile {
|
||||||
|
|
||||||
|
|
||||||
|
public DroneGrenadeEntity(EntityType<? extends DroneGrenadeEntity> type, Level world) {
|
||||||
|
super(type, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroneGrenadeEntity(EntityType<? extends DroneGrenadeEntity> type, LivingEntity entity, Level world) {
|
||||||
|
super(type, entity, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroneGrenadeEntity(LivingEntity entity, Level level) {
|
||||||
|
super(TargetModEntities.DRONE_GRENADE.get(), entity, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroneGrenadeEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
|
||||||
|
this(TargetModEntities.DRONE_GRENADE.get(), level);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
||||||
|
return NetworkHooks.getEntitySpawningPacket(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Item getDefaultItem() {
|
||||||
|
return TargetModItems.GRENADE_40MM.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onHitEntity(EntityHitResult result) {
|
||||||
|
Entity entity = result.getEntity();
|
||||||
|
if (this.getOwner() instanceof LivingEntity living) {
|
||||||
|
if (!living.level().isClientSide() && living instanceof ServerPlayer player) {
|
||||||
|
living.level().playSound(null, living.blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1);
|
||||||
|
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (entity instanceof LivingEntity) {
|
||||||
|
entity.invulnerableTime = 0;
|
||||||
|
}
|
||||||
|
entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 50);
|
||||||
|
if (this.level() instanceof ServerLevel) {
|
||||||
|
causeExplode();
|
||||||
|
this.discard();
|
||||||
|
}
|
||||||
|
this.discard();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onHitBlock(BlockHitResult blockHitResult) {
|
||||||
|
super.onHitBlock(blockHitResult);
|
||||||
|
if (this.level() instanceof ServerLevel) {
|
||||||
|
causeExplode();
|
||||||
|
}
|
||||||
|
this.discard();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
|
||||||
|
ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(),
|
||||||
|
1, 0, 0, 0, 0.01, true);
|
||||||
|
}
|
||||||
|
if (this.tickCount > 200 || this.isInWater()) {
|
||||||
|
if (this.level() instanceof ServerLevel) {
|
||||||
|
causeExplode();
|
||||||
|
}
|
||||||
|
this.discard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void causeExplode() {
|
||||||
|
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
||||||
|
TargetModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), 90,
|
||||||
|
this.getX(), this.getY(), this.getZ(), 7.5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||||
|
explosion.explode();
|
||||||
|
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
||||||
|
explosion.finalizeExplosion(false);
|
||||||
|
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getGravity() {
|
||||||
|
return 0.08F;
|
||||||
|
}
|
||||||
|
}
|
|
@ -37,6 +37,8 @@ public class TargetModEntities {
|
||||||
.setUpdateInterval(1).sized(0.5f, 0.5f));
|
.setUpdateInterval(1).sized(0.5f, 0.5f));
|
||||||
public static final RegistryObject<EntityType<GunGrenadeEntity>> GUN_GRENADE = register("projectile_gun_grenade",
|
public static final RegistryObject<EntityType<GunGrenadeEntity>> GUN_GRENADE = register("projectile_gun_grenade",
|
||||||
EntityType.Builder.<GunGrenadeEntity>of(GunGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(GunGrenadeEntity::new).sized(0.5f, 0.5f));
|
EntityType.Builder.<GunGrenadeEntity>of(GunGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(GunGrenadeEntity::new).sized(0.5f, 0.5f));
|
||||||
|
public static final RegistryObject<EntityType<DroneGrenadeEntity>> DRONE_GRENADE = register("projectile_drone_grenade",
|
||||||
|
EntityType.Builder.<DroneGrenadeEntity>of(DroneGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(DroneGrenadeEntity::new).sized(0.5f, 0.5f));
|
||||||
public static final RegistryObject<EntityType<FragEntity>> FRAG = register("projectile_frag",
|
public static final RegistryObject<EntityType<FragEntity>> FRAG = register("projectile_frag",
|
||||||
EntityType.Builder.<FragEntity>of(FragEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(FragEntity::new).sized(0.5f, 0.5f));
|
EntityType.Builder.<FragEntity>of(FragEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).setCustomClientFactory(FragEntity::new).sized(0.5f, 0.5f));
|
||||||
public static final RegistryObject<EntityType<TargetEntity>> TARGET = register("target",
|
public static final RegistryObject<EntityType<TargetEntity>> TARGET = register("target",
|
||||||
|
|
|
@ -25,6 +25,6 @@ public class TargetModEntityRenderers {
|
||||||
event.registerEntityRenderer(TargetModEntities.FRAG.get(), FragRenderer::new);
|
event.registerEntityRenderer(TargetModEntities.FRAG.get(), FragRenderer::new);
|
||||||
event.registerEntityRenderer(TargetModEntities.MK_42.get(), Mk42Renderer::new);
|
event.registerEntityRenderer(TargetModEntities.MK_42.get(), Mk42Renderer::new);
|
||||||
event.registerEntityRenderer(TargetModEntities.DRONE.get(), DroneRenderer::new);
|
event.registerEntityRenderer(TargetModEntities.DRONE.get(), DroneRenderer::new);
|
||||||
|
event.registerEntityRenderer(TargetModEntities.DRONE_GRENADE.get(), DroneGrenadeRenderer::new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,4 +191,5 @@ public class TargetModSounds {
|
||||||
|
|
||||||
public static final RegistryObject<SoundEvent> BULLET_SUPPLY = REGISTRY.register("bullet_supply", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "bullet_supply")));
|
public static final RegistryObject<SoundEvent> BULLET_SUPPLY = REGISTRY.register("bullet_supply", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "bullet_supply")));
|
||||||
public static final RegistryObject<SoundEvent> ADJUST_FOV = REGISTRY.register("adjust_fov", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "adjust_fov")));
|
public static final RegistryObject<SoundEvent> ADJUST_FOV = REGISTRY.register("adjust_fov", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "adjust_fov")));
|
||||||
|
public static final RegistryObject<SoundEvent> DRONE_SOUND = REGISTRY.register("drone_sound", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "drone_sound")));
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,16 @@ public class Monitor extends Item {
|
||||||
mc.options.setCameraType(CameraType.FIRST_PERSON);
|
mc.options.setCameraType(CameraType.FIRST_PERSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
drone.getPersistentData().putBoolean("left",false);
|
||||||
|
drone.getPersistentData().putBoolean("right",false);
|
||||||
|
drone.getPersistentData().putBoolean("forward",false);
|
||||||
|
drone.getPersistentData().putBoolean("backward",false);
|
||||||
|
drone.getPersistentData().putBoolean("up",false);
|
||||||
|
drone.getPersistentData().putBoolean("down",false);
|
||||||
|
}
|
||||||
return ar;
|
return ar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package net.mcreator.target.network.message;
|
||||||
|
|
||||||
|
import net.mcreator.target.entity.DroneEntity;
|
||||||
|
import net.mcreator.target.entity.Mk42Entity;
|
||||||
|
import net.mcreator.target.init.TargetModItems;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class DroneFireMessage {
|
||||||
|
private final int type;
|
||||||
|
|
||||||
|
public DroneFireMessage(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroneFireMessage(FriendlyByteBuf buffer) {
|
||||||
|
this.type = buffer.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void buffer(DroneFireMessage message, FriendlyByteBuf buffer) {
|
||||||
|
buffer.writeInt(message.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handler(DroneFireMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
NetworkEvent.Context context = contextSupplier.get();
|
||||||
|
context.enqueueWork(() -> {
|
||||||
|
if (context.getSender() != null) {
|
||||||
|
pressAction(context.getSender(), message.type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
context.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void pressAction(Player player, int type) {
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (stack.is(TargetModItems.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 (type == 0) {
|
||||||
|
drone.getPersistentData().putBoolean("firing",true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1574,5 +1574,13 @@
|
||||||
"stream": false
|
"stream": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"drone_sound": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "target:drone_sound",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
BIN
src/main/resources/assets/target/sounds/drone_sound.ogg
Normal file
BIN
src/main/resources/assets/target/sounds/drone_sound.ogg
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue