添加M35头盔,完善插板防弹机制

This commit is contained in:
Atsuihsio 2024-10-01 19:35:11 +08:00
parent 4e4be69dbc
commit 606904bdc8
16 changed files with 1312 additions and 23 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-10-01T13:07:54.2773833 Item Models: superbwarfare // 1.20.1 2024-10-01T17:58:21.3902677 Item Models: superbwarfare
13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/aa_12_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/aa_12_blueprint.json
13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/ak_47_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/ak_47_blueprint.json
c993bddc0db9453ffbefa59f9ac9a74dba909038 assets/superbwarfare/models/item/ancient_cpu.json c993bddc0db9453ffbefa59f9ac9a74dba909038 assets/superbwarfare/models/item/ancient_cpu.json
@ -23,6 +23,7 @@ dd455cf29eed0ef5eb5e90ef3d7140cb8de61efe assets/superbwarfare/models/item/drone.
2419503d8b597c92684d1921895a12fca33fec69 assets/superbwarfare/models/item/epic_material_pack.json 2419503d8b597c92684d1921895a12fca33fec69 assets/superbwarfare/models/item/epic_material_pack.json
c102839d5f7d4bdc1c6cbfbf4c2c907b70f22052 assets/superbwarfare/models/item/fusee.json c102839d5f7d4bdc1c6cbfbf4c2c907b70f22052 assets/superbwarfare/models/item/fusee.json
5326409e01ffd1f0a6330299799994e267db2b6b assets/superbwarfare/models/item/galena.json 5326409e01ffd1f0a6330299799994e267db2b6b assets/superbwarfare/models/item/galena.json
4bf506de247afbbec816f6637030f637e68ce0d4 assets/superbwarfare/models/item/ge_helmet_m_35.json
13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/glock_17_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/glock_17_blueprint.json
13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/glock_18_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/glock_18_blueprint.json
8752c2b2b648ff23d6b93eedcc6c0500c695afd7 assets/superbwarfare/models/item/grain.json 8752c2b2b648ff23d6b93eedcc6c0500c695afd7 assets/superbwarfare/models/item/grain.json

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "superbwarfare:item/ge_helmet_m_35"
}
}

View file

@ -0,0 +1,23 @@
package net.mcreator.superbwarfare.client.model.armor;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.item.armor.GeHelmetM35;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class GeHelmetM35Model extends GeoModel<GeHelmetM35> {
@Override
public ResourceLocation getAnimationResource(GeHelmetM35 object) {
return null;
}
@Override
public ResourceLocation getModelResource(GeHelmetM35 object) {
return new ResourceLocation(ModUtils.MODID, "geo/ge_helmet_m_35.geo.json");
}
@Override
public ResourceLocation getTextureResource(GeHelmetM35 object) {
return new ResourceLocation(ModUtils.MODID, "textures/armor/ge_helmet_m_35.png");
}
}

View file

@ -0,0 +1,21 @@
package net.mcreator.superbwarfare.client.renderer.armor;
import net.mcreator.superbwarfare.client.model.armor.GeHelmetM35Model;
import net.mcreator.superbwarfare.item.armor.GeHelmetM35;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class GeHelmetM35ArmorRenderer extends GeoArmorRenderer<GeHelmetM35> {
public GeHelmetM35ArmorRenderer() {
super(new GeHelmetM35Model());
this.head = new GeoBone(null, "", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(GeHelmetM35 animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -93,6 +93,7 @@ public class ModItemModelProvider extends ItemModelProvider {
simpleItem(ModItems.RU_CHEST_6B43); simpleItem(ModItems.RU_CHEST_6B43);
simpleItem(ModItems.US_HELMET_PASTG); simpleItem(ModItems.US_HELMET_PASTG);
simpleItem(ModItems.US_CHEST_IOTV); simpleItem(ModItems.US_CHEST_IOTV);
simpleItem(ModItems.GE_HELMET_M_35);
// blueprints // blueprints
blueprintItem(ModItems.TRACHELIUM_BLUEPRINT); blueprintItem(ModItems.TRACHELIUM_BLUEPRINT);

View file

@ -68,7 +68,6 @@ public class LivingEventHandler {
*/ */
private static void reduceBulletDamage(LivingHurtEvent event) { private static void reduceBulletDamage(LivingHurtEvent event) {
DamageSource source = event.getSource(); DamageSource source = event.getSource();
if (source == null) return;
LivingEntity entity = event.getEntity(); LivingEntity entity = event.getEntity();
if (entity == null) return; if (entity == null) return;
Entity sourceEntity = source.getEntity(); Entity sourceEntity = source.getEntity();
@ -79,6 +78,7 @@ public class LivingEventHandler {
ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY; ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
//距离衰减
if (DamageTypeTool.isGunDamage(source)) { if (DamageTypeTool.isGunDamage(source)) {
double distance = entity.position().distanceTo(sourceEntity.position()); double distance = entity.position().distanceTo(sourceEntity.position());
@ -95,24 +95,28 @@ public class LivingEventHandler {
} }
} }
if (source.is(ModTags.DamageTypes.PROJECTILE)) { //计算防弹插板减伤
damage *= 1 - Mth.clamp(entity.getAttributeValue(ModAttributes.BULLET_RESISTANCE.get()), 0, 1); if (source.is(ModTags.DamageTypes.PROJECTILE) || source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST);
if (armor != ItemStack.EMPTY && armor.getTag() != null && armor.getTag().contains("ArmorPlate")) {
double armorValue;
armorValue = armor.getOrCreateTag().getDouble("ArmorPlate");
armor.getOrCreateTag().putDouble("ArmorPlate", Math.max(armor.getOrCreateTag().getDouble("ArmorPlate") - damage, 0));
damage = Math.max(damage - armorValue, 0);
}
//计算防弹护具减伤
if (source.is(ModTags.DamageTypes.PROJECTILE)) {
damage *= 1 - 0.8 * Mth.clamp(entity.getAttributeValue(ModAttributes.BULLET_RESISTANCE.get()), 0, 1);
}
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
damage *= 1 - 0.2 * Mth.clamp(entity.getAttributeValue(ModAttributes.BULLET_RESISTANCE.get()), 0, 1);
}
} }
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) { event.setAmount((float) damage);
damage *= 1 - 0.2 * Mth.clamp(entity.getAttributeValue(ModAttributes.BULLET_RESISTANCE.get()), 0, 1);
}
ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST);
double armorValue = 0;
if (armor != ItemStack.EMPTY) {
armorValue = armor.getOrCreateTag().getDouble("ArmorPlate");
armor.getOrCreateTag().putDouble("ArmorPlate", Math.max(armor.getOrCreateTag().getDouble("ArmorPlate") - damage, 0));
}
event.setAmount((float) (Math.max(damage - armorValue, 0)));
if (entity instanceof TargetEntity && sourceEntity instanceof Player player) { if (entity instanceof TargetEntity && sourceEntity instanceof Player player) {
player.displayClientMessage(Component.literal("Damage:" + new DecimalFormat("##.#").format(damage) + player.displayClientMessage(Component.literal("Damage:" + new DecimalFormat("##.#").format(damage) +

View file

@ -2,10 +2,7 @@ package net.mcreator.superbwarfare.init;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.item.*; import net.mcreator.superbwarfare.item.*;
import net.mcreator.superbwarfare.item.armor.RuChest6b43; import net.mcreator.superbwarfare.item.armor.*;
import net.mcreator.superbwarfare.item.armor.RuHelmet6b47;
import net.mcreator.superbwarfare.item.armor.UsChestIotv;
import net.mcreator.superbwarfare.item.armor.UsHelmetPastg;
import net.mcreator.superbwarfare.item.common.BlueprintItem; import net.mcreator.superbwarfare.item.common.BlueprintItem;
import net.mcreator.superbwarfare.item.common.MaterialPack; import net.mcreator.superbwarfare.item.common.MaterialPack;
import net.mcreator.superbwarfare.item.common.ammo.*; import net.mcreator.superbwarfare.item.common.ammo.*;
@ -130,6 +127,7 @@ public class ModItems {
public static final RegistryObject<Item> RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new); public static final RegistryObject<Item> RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new);
public static final RegistryObject<Item> US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new); public static final RegistryObject<Item> US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new);
public static final RegistryObject<Item> US_CHEST_IOTV = ITEMS.register("us_chest_iotv", UsChestIotv::new); public static final RegistryObject<Item> US_CHEST_IOTV = ITEMS.register("us_chest_iotv", UsChestIotv::new);
public static final RegistryObject<Item> GE_HELMET_M_35 = ITEMS.register("ge_helmet_m_35", GeHelmetM35::new);
public static final RegistryObject<Item> MORTAR_DEPLOYER = ITEMS.register("mortar_deployer", MortarDeployer::new); public static final RegistryObject<Item> MORTAR_DEPLOYER = ITEMS.register("mortar_deployer", MortarDeployer::new);
public static final RegistryObject<Item> MORTAR_BARREL = ITEMS.register("mortar_barrel", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> MORTAR_BARREL = ITEMS.register("mortar_barrel", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> MORTAR_BASE_PLATE = ITEMS.register("mortar_base_plate", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> MORTAR_BASE_PLATE = ITEMS.register("mortar_base_plate", () -> new Item(new Item.Properties()));

View file

@ -0,0 +1,68 @@
package net.mcreator.superbwarfare.item.armor;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.renderer.armor.GeHelmetM35ArmorRenderer;
import net.mcreator.superbwarfare.init.ModAttributes;
import net.mcreator.superbwarfare.tiers.ModArmorMaterial;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.UUID;
import java.util.function.Consumer;
public class GeHelmetM35 extends ArmorItem implements GeoItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public GeHelmetM35() {
super(ModArmorMaterial.STEEL, Type.HELMET, new Properties());
}
@Override
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
consumer.accept(new IClientItemExtensions() {
private GeoArmorRenderer<?> renderer;
@Override
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
if (this.renderer == null)
this.renderer = new GeHelmetM35ArmorRenderer();
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
return this.renderer;
}
});
}
@Override
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
Multimap<Attribute, AttributeModifier> map = super.getDefaultAttributeModifiers(slot);
UUID uuid = new UUID(slot.toString().hashCode(), 0);
if (slot == EquipmentSlot.HEAD) {
map = HashMultimap.create(map);
map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER,
0.1 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION));
}
return map;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -18,7 +18,13 @@ public enum ModArmorMaterial implements ArmorMaterial {
p.put(ArmorItem.Type.LEGGINGS, 6); p.put(ArmorItem.Type.LEGGINGS, 6);
p.put(ArmorItem.Type.CHESTPLATE, 8); p.put(ArmorItem.Type.CHESTPLATE, 8);
p.put(ArmorItem.Type.HELMET, 3); p.put(ArmorItem.Type.HELMET, 3);
}), 10, SoundEvents.ARMOR_EQUIP_IRON, 4.0F, 0.0F, () -> Ingredient.of(ModItems.CEMENTED_CARBIDE_INGOT.get())); }), 10, SoundEvents.ARMOR_EQUIP_IRON, 4.0F, 0.05F, () -> Ingredient.of(ModItems.CEMENTED_CARBIDE_INGOT.get())),
STEEL("steel", 35, Util.make(new EnumMap<>(ArmorItem.Type.class), p -> {
p.put(ArmorItem.Type.BOOTS, 2);
p.put(ArmorItem.Type.LEGGINGS, 5);
p.put(ArmorItem.Type.CHESTPLATE, 7);
p.put(ArmorItem.Type.HELMET, 2);
}), 9, SoundEvents.ARMOR_EQUIP_IRON, 1.0F, 0.0F, () -> Ingredient.of(ModItems.STEEL_INGOT.get()));
private static final EnumMap<ArmorItem.Type, Integer> HEALTH_FUNCTION_FOR_TYPE = Util.make(new EnumMap<>(ArmorItem.Type.class), (p_266653_) -> { private static final EnumMap<ArmorItem.Type, Integer> HEALTH_FUNCTION_FOR_TYPE = Util.make(new EnumMap<>(ArmorItem.Type.class), (p_266653_) -> {
p_266653_.put(ArmorItem.Type.BOOTS, 13); p_266653_.put(ArmorItem.Type.BOOTS, 13);

File diff suppressed because it is too large Load diff

View file

@ -208,6 +208,7 @@
"item.superbwarfare.ru_chest_6b43": "Russia 6b43 Chest", "item.superbwarfare.ru_chest_6b43": "Russia 6b43 Chest",
"item.superbwarfare.us_helmet_pastg": "US PASTG Helmet", "item.superbwarfare.us_helmet_pastg": "US PASTG Helmet",
"item.superbwarfare.us_chest_iotv": "US IOTV Chest", "item.superbwarfare.us_chest_iotv": "US IOTV Chest",
"item.superbwarfare.ge_helmet_m_35": "Germany M35 Helmet",
"item.superbwarfare.ap_bullet": "Ap Bullet", "item.superbwarfare.ap_bullet": "Ap Bullet",
"des.superbwarfare.ap_bullet": "Increased the armor-piercing ratio of bullets", "des.superbwarfare.ap_bullet": "Increased the armor-piercing ratio of bullets",

View file

@ -208,6 +208,7 @@
"item.superbwarfare.ru_chest_6b43": "俄罗斯6B43防弹胸甲", "item.superbwarfare.ru_chest_6b43": "俄罗斯6B43防弹胸甲",
"item.superbwarfare.us_helmet_pastg": "美制PASTG头盔", "item.superbwarfare.us_helmet_pastg": "美制PASTG头盔",
"item.superbwarfare.us_chest_iotv": "美制IOTV防弹胸甲", "item.superbwarfare.us_chest_iotv": "美制IOTV防弹胸甲",
"item.superbwarfare.ge_helmet_m_35": "德国M35头盔",
"item.superbwarfare.ap_bullet": "穿甲弹", "item.superbwarfare.ap_bullet": "穿甲弹",
"des.superbwarfare.ap_bullet": "增加子弹的穿甲比例", "des.superbwarfare.ap_bullet": "增加子弹的穿甲比例",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"aaa",
"aba"
],
"key": {
"a": {
"tag":"forge:ingots/steel"
},
"b": {
"tag": "forge:dyes/black"
}
},
"result": {
"item": "superbwarfare:ge_helmet_m_35",
"count": 1
}
}