尝试合并武器切换相关处理
This commit is contained in:
parent
45e99ab220
commit
e13ddc7f5d
4 changed files with 151 additions and 42 deletions
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.ContainerMobileVehicleEnt
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.LandArmorEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.LandArmorEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
|
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
|
||||||
import com.atsuishio.superbwarfare.tools.AmmoType;
|
import com.atsuishio.superbwarfare.tools.AmmoType;
|
||||||
|
@ -72,8 +73,6 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
public static final EntityDataAccessor<Integer> AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Integer> MG_AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> MG_AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Integer> LOADED_AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> LOADED_AMMO = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Integer> WEAPON_TYPE = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
|
||||||
public static final EntityDataAccessor<Integer> PASSENGER_WEAPON_TYPE = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.INT);
|
|
||||||
public static final EntityDataAccessor<Float> TRACK_L = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> TRACK_L = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
||||||
public static final EntityDataAccessor<Float> TRACK_R = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> TRACK_R = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
||||||
public static final EntityDataAccessor<Float> YAW = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> YAW = SynchedEntityData.defineId(Yx100Entity.class, EntityDataSerializers.FLOAT);
|
||||||
|
@ -113,6 +112,20 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
this.setMaxUpStep(1.5f);
|
this.setMaxUpStep(1.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VehicleWeapon[][] getAllWeapons() {
|
||||||
|
// TODO 正确实现武器创建
|
||||||
|
return new VehicleWeapon[][]{
|
||||||
|
new VehicleWeapon[]{
|
||||||
|
new VehicleWeapon().sound(ModSounds.INTO_MISSILE.get()),
|
||||||
|
new VehicleWeapon().sound(ModSounds.INTO_CANNON.get()),
|
||||||
|
},
|
||||||
|
new VehicleWeapon[]{
|
||||||
|
new VehicleWeapon(),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void defineSynchedData() {
|
protected void defineSynchedData() {
|
||||||
super.defineSynchedData();
|
super.defineSynchedData();
|
||||||
|
@ -121,8 +134,6 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
this.entityData.define(LOADED_AMMO, 0);
|
this.entityData.define(LOADED_AMMO, 0);
|
||||||
this.entityData.define(FIRE_ANIM, 0);
|
this.entityData.define(FIRE_ANIM, 0);
|
||||||
this.entityData.define(DELTA_ROT, 0f);
|
this.entityData.define(DELTA_ROT, 0f);
|
||||||
this.entityData.define(WEAPON_TYPE, 0);
|
|
||||||
this.entityData.define(PASSENGER_WEAPON_TYPE, 0);
|
|
||||||
this.entityData.define(TRACK_L, 0f);
|
this.entityData.define(TRACK_L, 0f);
|
||||||
this.entityData.define(TRACK_R, 0f);
|
this.entityData.define(TRACK_R, 0f);
|
||||||
this.entityData.define(YAW, 0f);
|
this.entityData.define(YAW, 0f);
|
||||||
|
@ -147,7 +158,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
public @NotNull Packet<ClientGamePacketListener> getAddEntityPacket() {
|
||||||
return NetworkHooks.getEntitySpawningPacket(this);
|
return NetworkHooks.getEntitySpawningPacket(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +184,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void playStepSound(BlockPos pPos, BlockState pState) {
|
protected void playStepSound(@NotNull BlockPos pPos, @NotNull BlockState pState) {
|
||||||
this.playSound(ModSounds.BMP_STEP.get(), Mth.abs(this.entityData.get(POWER)) * 8, random.nextFloat() * 0.15f + 1f);
|
this.playSound(ModSounds.BMP_STEP.get(), Mth.abs(this.entityData.get(POWER)) * 8, random.nextFloat() * 0.15f + 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -929,18 +940,9 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changeWeapon(int index, int value, boolean isScroll) {
|
public void changeWeapon(int index, int value, boolean isScroll) {
|
||||||
|
WeaponVehicleEntity.super.changeWeapon(index, value, isScroll);
|
||||||
if (index != 0) return;
|
if (index != 0) return;
|
||||||
|
|
||||||
var type = isScroll ? (value + getWeaponType(0) + 2) % 2 : value;
|
|
||||||
|
|
||||||
var sound = switch (type) {
|
|
||||||
case 0 -> ModSounds.INTO_MISSILE.get();
|
|
||||||
case 1 -> ModSounds.INTO_CANNON.get();
|
|
||||||
default -> null;
|
|
||||||
};
|
|
||||||
if (sound == null) return;
|
|
||||||
setWeaponType(0, type);
|
|
||||||
|
|
||||||
if (entityData.get(LOADED_AMMO) > 0) {
|
if (entityData.get(LOADED_AMMO) > 0) {
|
||||||
if (this.getFirstPassenger() instanceof Player player && !player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
if (this.getFirstPassenger() instanceof Player player && !player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
|
||||||
this.insertItem(getCurrentAmmoItem(), 1);
|
this.insertItem(getCurrentAmmoItem(), 1);
|
||||||
|
@ -954,24 +956,6 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
|
||||||
var clientboundstopsoundpacket = new ClientboundStopSoundPacket(ModSounds.YX_100_RELOAD.get().getLocation(), SoundSource.PLAYERS);
|
var clientboundstopsoundpacket = new ClientboundStopSoundPacket(ModSounds.YX_100_RELOAD.get().getLocation(), SoundSource.PLAYERS);
|
||||||
player.connection.send(clientboundstopsoundpacket);
|
player.connection.send(clientboundstopsoundpacket);
|
||||||
}
|
}
|
||||||
this.level().playSound(null, this, sound, this.getSoundSource(), 1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getWeaponType(int index) {
|
|
||||||
return switch (index) {
|
|
||||||
case 0 -> entityData.get(WEAPON_TYPE);
|
|
||||||
case 1 -> entityData.get(PASSENGER_WEAPON_TYPE);
|
|
||||||
default -> -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWeaponType(int index, int type) {
|
|
||||||
switch (index) {
|
|
||||||
case 0 -> entityData.set(WEAPON_TYPE, type);
|
|
||||||
case 1 -> entityData.set(PASSENGER_WEAPON_TYPE, type);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,10 +4,8 @@ import com.atsuishio.superbwarfare.ModUtils;
|
||||||
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
||||||
import com.atsuishio.superbwarfare.init.ModDamageTypes;
|
import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.init.ModParticleTypes;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
|
||||||
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
|
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
|
||||||
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
|
@ -16,6 +14,7 @@ import com.atsuishio.superbwarfare.tools.VectorTool;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.math.Axis;
|
import com.mojang.math.Axis;
|
||||||
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
@ -67,6 +66,10 @@ public abstract class VehicleEntity extends Entity {
|
||||||
protected static final EntityDataAccessor<String> LAST_ATTACKER_UUID = SynchedEntityData.defineId(VehicleEntity.class, EntityDataSerializers.STRING);
|
protected static final EntityDataAccessor<String> LAST_ATTACKER_UUID = SynchedEntityData.defineId(VehicleEntity.class, EntityDataSerializers.STRING);
|
||||||
protected static final EntityDataAccessor<String> LAST_DRIVER_UUID = SynchedEntityData.defineId(VehicleEntity.class, EntityDataSerializers.STRING);
|
protected static final EntityDataAccessor<String> LAST_DRIVER_UUID = SynchedEntityData.defineId(VehicleEntity.class, EntityDataSerializers.STRING);
|
||||||
|
|
||||||
|
protected static final EntityDataAccessor<IntList> SELECTED_WEAPON = SynchedEntityData.defineId(VehicleEntity.class, ModSerializers.INT_LIST_SERIALIZER.get());
|
||||||
|
|
||||||
|
public VehicleWeapon[][] availableWeapons;
|
||||||
|
|
||||||
protected int interpolationSteps;
|
protected int interpolationSteps;
|
||||||
protected double x;
|
protected double x;
|
||||||
protected double y;
|
protected double y;
|
||||||
|
@ -230,6 +233,21 @@ public abstract class VehicleEntity extends Entity {
|
||||||
this.entityData.define(HEALTH, this.getMaxHealth());
|
this.entityData.define(HEALTH, this.getMaxHealth());
|
||||||
this.entityData.define(LAST_ATTACKER_UUID, "undefined");
|
this.entityData.define(LAST_ATTACKER_UUID, "undefined");
|
||||||
this.entityData.define(LAST_DRIVER_UUID, "undefined");
|
this.entityData.define(LAST_DRIVER_UUID, "undefined");
|
||||||
|
|
||||||
|
if (this instanceof WeaponVehicleEntity weaponVehicle) {
|
||||||
|
this.availableWeapons = new VehicleWeapon[this.getMaxPassengers()][];
|
||||||
|
|
||||||
|
var weapons = weaponVehicle.getAllWeapons();
|
||||||
|
for (int i = 0; i < weapons.length || i < this.getMaxPassengers(); i++) {
|
||||||
|
this.availableWeapons[i] = weapons[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
var selected = new int[this.getMaxPassengers()];
|
||||||
|
for (int i = 0; i < this.getMaxPassengers(); i++) {
|
||||||
|
selected[i] = weaponVehicle.hasWeapon(i) ? 0 : -1;
|
||||||
|
}
|
||||||
|
this.entityData.define(SELECTED_WEAPON, IntList.of(selected));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -237,6 +255,11 @@ public abstract class VehicleEntity extends Entity {
|
||||||
this.entityData.set(LAST_ATTACKER_UUID, compound.getString("LastAttacker"));
|
this.entityData.set(LAST_ATTACKER_UUID, compound.getString("LastAttacker"));
|
||||||
this.entityData.set(LAST_DRIVER_UUID, compound.getString("LastDriver"));
|
this.entityData.set(LAST_DRIVER_UUID, compound.getString("LastDriver"));
|
||||||
this.entityData.set(HEALTH, compound.getFloat("Health"));
|
this.entityData.set(HEALTH, compound.getFloat("Health"));
|
||||||
|
|
||||||
|
if (this instanceof WeaponVehicleEntity) {
|
||||||
|
var selected = compound.getIntArray("SelectedWeapon");
|
||||||
|
this.entityData.set(SELECTED_WEAPON, IntList.of(selected));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -244,6 +267,10 @@ public abstract class VehicleEntity extends Entity {
|
||||||
compound.putFloat("Health", this.entityData.get(HEALTH));
|
compound.putFloat("Health", this.entityData.get(HEALTH));
|
||||||
compound.putString("LastAttacker", this.entityData.get(LAST_ATTACKER_UUID));
|
compound.putString("LastAttacker", this.entityData.get(LAST_ATTACKER_UUID));
|
||||||
compound.putString("LastDriver", this.entityData.get(LAST_DRIVER_UUID));
|
compound.putString("LastDriver", this.entityData.get(LAST_DRIVER_UUID));
|
||||||
|
|
||||||
|
if (this instanceof WeaponVehicleEntity) {
|
||||||
|
compound.putIntArray("SelectedWeapon", this.entityData.get(SELECTED_WEAPON).toIntArray());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
package com.atsuishio.superbwarfare.entity.vehicle.base;
|
package com.atsuishio.superbwarfare.entity.vehicle.base;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon;
|
||||||
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拥有任意武器的载具
|
* 拥有任意武器的载具
|
||||||
*/
|
*/
|
||||||
|
@ -11,7 +16,11 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity {
|
||||||
* @return 武器是否可用
|
* @return 武器是否可用
|
||||||
*/
|
*/
|
||||||
default boolean hasWeapon(int index) {
|
default boolean hasWeapon(int index) {
|
||||||
return getWeaponType(index) != -1;
|
if (!(this instanceof VehicleEntity vehicle)) return false;
|
||||||
|
if (index < 0 || index >= vehicle.getMaxPassengers()) return false;
|
||||||
|
|
||||||
|
var weapons = getAvailableWeapons(index);
|
||||||
|
return !weapons.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +31,73 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity {
|
||||||
* @param isScroll 是否是滚动事件
|
* @param isScroll 是否是滚动事件
|
||||||
*/
|
*/
|
||||||
default void changeWeapon(int index, int value, boolean isScroll) {
|
default void changeWeapon(int index, int value, boolean isScroll) {
|
||||||
|
if (!(this instanceof VehicleEntity vehicle)) return;
|
||||||
|
if (index < 0 || index >= vehicle.getMaxPassengers()) return;
|
||||||
|
|
||||||
|
var weapons = getAvailableWeapons(index);
|
||||||
|
if (weapons.isEmpty()) return;
|
||||||
|
var count = weapons.size();
|
||||||
|
|
||||||
|
var typeIndex = isScroll ? (value + getWeaponType(index) + count) % count : value;
|
||||||
|
var weapon = weapons.get(typeIndex);
|
||||||
|
|
||||||
|
// 修改该槽位选择的武器
|
||||||
|
setWeaponType(index, typeIndex);
|
||||||
|
|
||||||
|
// 播放武器切换音效
|
||||||
|
var sound = weapon.sound;
|
||||||
|
if (sound != null) {
|
||||||
|
vehicle.level().playSound(null, vehicle, sound, vehicle.getSoundSource(), 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有可用武器列表
|
||||||
|
*/
|
||||||
|
default VehicleWeapon[][] getAllWeapons() {
|
||||||
|
return new VehicleWeapon[0][];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取该槽位可用的武器列表
|
||||||
|
*
|
||||||
|
* @param index 武器槽位
|
||||||
|
*/
|
||||||
|
default List<VehicleWeapon> getAvailableWeapons(int index) {
|
||||||
|
if (!(this instanceof VehicleEntity vehicle)) return List.of();
|
||||||
|
if (index < 0 || index >= vehicle.getMaxPassengers()) return List.of();
|
||||||
|
|
||||||
|
if (vehicle.availableWeapons[index] != null) {
|
||||||
|
return List.of(vehicle.availableWeapons[index]);
|
||||||
|
}
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
default VehicleWeapon[][] initAvailableWeapons() {
|
||||||
|
if (!(this instanceof VehicleEntity vehicle)) return null;
|
||||||
|
if (vehicle.availableWeapons == null) {
|
||||||
|
vehicle.availableWeapons = new VehicleWeapon[vehicle.getMaxPassengers()][];
|
||||||
|
}
|
||||||
|
|
||||||
|
return vehicle.availableWeapons;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取该槽位当前的武器
|
||||||
|
*
|
||||||
|
* @param index 武器槽位
|
||||||
|
*/
|
||||||
|
default VehicleWeapon getWeapon(int index) {
|
||||||
|
if (!(this instanceof VehicleEntity vehicle)) return null;
|
||||||
|
if (index < 0 || index >= vehicle.getMaxPassengers()) return null;
|
||||||
|
|
||||||
|
var weapons = getAvailableWeapons(index);
|
||||||
|
if (weapons.isEmpty()) return null;
|
||||||
|
|
||||||
|
var type = getWeaponType(index);
|
||||||
|
if (type < 0 || type >= weapons.size()) return null;
|
||||||
|
|
||||||
|
return weapons.get(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,8 +107,12 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity {
|
||||||
* @return 武器类型
|
* @return 武器类型
|
||||||
*/
|
*/
|
||||||
default int getWeaponType(int index) {
|
default int getWeaponType(int index) {
|
||||||
// 默认认为只有第一个位置拥有一个武器
|
if (!(this instanceof VehicleEntity vehicle)) return -1;
|
||||||
return index == 0 ? 0 : -1;
|
|
||||||
|
var selectedWeapons = vehicle.getEntityData().get(VehicleEntity.SELECTED_WEAPON);
|
||||||
|
if (selectedWeapons.size() <= index) return -1;
|
||||||
|
|
||||||
|
return selectedWeapons.getInt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,5 +122,10 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity {
|
||||||
* @param type 武器类型
|
* @param type 武器类型
|
||||||
*/
|
*/
|
||||||
default void setWeaponType(int index, int type) {
|
default void setWeaponType(int index, int type) {
|
||||||
|
if (!(this instanceof VehicleEntity vehicle)) return;
|
||||||
|
|
||||||
|
var selectedWeapons = vehicle.getEntityData().get(VehicleEntity.SELECTED_WEAPON).toIntArray();
|
||||||
|
selectedWeapons[index] = type;
|
||||||
|
vehicle.getEntityData().set(VehicleEntity.SELECTED_WEAPON, IntList.of(selectedWeapons));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.entity.vehicle.weapon;
|
||||||
|
|
||||||
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.sounds.SoundEvent;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
public class VehicleWeapon {
|
public class VehicleWeapon {
|
||||||
|
@ -21,6 +22,8 @@ public class VehicleWeapon {
|
||||||
// 备弹量
|
// 备弹量
|
||||||
public int backupAmmo;
|
public int backupAmmo;
|
||||||
|
|
||||||
|
public SoundEvent sound;
|
||||||
|
|
||||||
public VehicleWeapon icon(ResourceLocation icon) {
|
public VehicleWeapon icon(ResourceLocation icon) {
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
return this;
|
return this;
|
||||||
|
@ -48,6 +51,16 @@ public class VehicleWeapon {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切换到该武器时的音效
|
||||||
|
*
|
||||||
|
* @param sound 音效
|
||||||
|
*/
|
||||||
|
public VehicleWeapon sound(SoundEvent sound) {
|
||||||
|
this.sound = sound;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 载具武器的装弹类型
|
* 载具武器的装弹类型
|
||||||
* INDIRECT - 需要先进行上弹,再发射
|
* INDIRECT - 需要先进行上弹,再发射
|
||||||
|
@ -55,7 +68,7 @@ public class VehicleWeapon {
|
||||||
*/
|
*/
|
||||||
public enum AmmoType {
|
public enum AmmoType {
|
||||||
INDIRECT,
|
INDIRECT,
|
||||||
DIRECT
|
DIRECT,
|
||||||
}
|
}
|
||||||
|
|
||||||
public VehicleWeapon maxAmmo(int maxAmmo) {
|
public VehicleWeapon maxAmmo(int maxAmmo) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue