diff --git a/README.md b/README.md index 2df6694..f8bf35c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Protection Engineering · 工程防护 +![展示](doc/展示.png) Minecraft NeoForge 1.21.1 模组。为工程师护甲系统提供**可安装附件**,每个附件安装在护甲的特定槽位上,提供被动免疫、属性加成或主动技能。依赖 **Create** 模组。 策划/美术:Rhodes_Koei @@ -84,6 +85,14 @@ Minecraft NeoForge 1.21.1 模组。为工程师护甲系统提供**可安装附 |------|------| | 改良鞋底 | 防滑,免疫粘液/蜂蜜块/灵魂沙减速,细雪行走 | | 缓冲鞋底 | 摔落伤害 -20%,等效摔落高度 -1 | +| 隔热鞋底 | 免疫岩浆块伤害 | + +### 武器 / 工具 + +| 物品 | 功能 | +|------|------| +| 工程师链锯剑 | 伤害/攻速等同钻石剑,耐久等同下界合金,可砍树(斧头),兼容剑+斧附魔 | +| 工程师盾牌 | 3×原版耐久,斧破防冷却减半,防护范围 +20% | ### 消耗品 diff --git "a/doc/\345\261\225\347\244\272.png" "b/doc/\345\261\225\347\244\272.png" new file mode 100644 index 0000000..def97e9 Binary files /dev/null and "b/doc/\345\261\225\347\244\272.png" differ diff --git a/gradle.properties b/gradle.properties index d44d7fb..efa8e9c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,7 @@ mod_name=Protection Engineering # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=1.0.3 +mod_version=1.0.4 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/generated/resources/.cache/20bb0e6d2d8ecc891315cb4dab3b3986bba3aed3 b/src/generated/resources/.cache/20bb0e6d2d8ecc891315cb4dab3b3986bba3aed3 index a9d65df..9833ecc 100644 --- a/src/generated/resources/.cache/20bb0e6d2d8ecc891315cb4dab3b3986bba3aed3 +++ b/src/generated/resources/.cache/20bb0e6d2d8ecc891315cb4dab3b3986bba3aed3 @@ -1,7 +1,7 @@ -// 1.21.1 2026-06-23T07:38:15.5661198 Registrate Provider for protectionengineering [Registries, Data Maps, Recipes, Advancements, Loot Tables, Tags (blocks), Tags (enchantments), Tags (items), Tags (fluids), Tags (entity_types), generic_server_provider, Blockstates, Item models, Lang (en_us/en_ud), generic_client_provider] +// 1.21.1 2026-06-24T00:07:46.5949336 Registrate Provider for protectionengineering [Registries, Data Maps, Recipes, Advancements, Loot Tables, Tags (blocks), Tags (enchantments), Tags (items), Tags (fluids), Tags (entity_types), generic_server_provider, Blockstates, Item models, Lang (en_us/en_ud), generic_client_provider] 9548b733d8408aab37f04a6ccfcda663b4d8e229 assets/protectionengineering/blockstates/workbench.json -cecaa1fb9034d4ff8edd8246b69866306c6ffc4b assets/protectionengineering/lang/en_ud.json -32e3e427d848ba7a9ee7ed826e8907166b7e71d9 assets/protectionengineering/lang/en_us.json +3ebc6bada8dee1c71143cd590a503026603d9e78 assets/protectionengineering/lang/en_ud.json +50483ba261acea55871e79e9c15e6255fd297291 assets/protectionengineering/lang/en_us.json de432a9aaddd8bf94d4ff0714405d45b68482019 assets/protectionengineering/models/item/advanced_aps.json fd6421744d19fc737d2db860c16f73d268b23727 assets/protectionengineering/models/item/air_filter.json d83a0d8a91c9426b9002ffad467f65ec884026bb assets/protectionengineering/models/item/aps.json diff --git a/src/generated/resources/assets/protectionengineering/lang/en_ud.json b/src/generated/resources/assets/protectionengineering/lang/en_ud.json index 0f252e6..a77f989 100644 --- a/src/generated/resources/assets/protectionengineering/lang/en_ud.json +++ b/src/generated/resources/assets/protectionengineering/lang/en_ud.json @@ -13,6 +13,7 @@ "item.protectionengineering.engineer_goggles": "sǝןbbo⅁ ɹǝǝuıbuƎ", "item.protectionengineering.engineer_hood": "pooH ɹǝǝuıbuƎ", "item.protectionengineering.engineer_leggings": "sbuıbbǝꞀ ɹǝǝuıbuƎ", + "item.protectionengineering.engineer_saw_sword": "pɹoʍS ʍɐS ɹǝǝuıbuƎ", "item.protectionengineering.extra_mechanical_arm": "ɯɹⱯ ןɐɔıuɐɥɔǝW ɐɹʇxƎ", "item.protectionengineering.heavy_exoskeleton": "uoʇǝןǝʞsoxƎ ʎʌɐǝH", "item.protectionengineering.hormone_injector": "ɹoʇɔǝظuI ǝuoɯɹoH", diff --git a/src/generated/resources/assets/protectionengineering/lang/en_us.json b/src/generated/resources/assets/protectionengineering/lang/en_us.json index 206dfa2..8b9825c 100644 --- a/src/generated/resources/assets/protectionengineering/lang/en_us.json +++ b/src/generated/resources/assets/protectionengineering/lang/en_us.json @@ -13,6 +13,7 @@ "item.protectionengineering.engineer_goggles": "Engineer Goggles", "item.protectionengineering.engineer_hood": "Engineer Hood", "item.protectionengineering.engineer_leggings": "Engineer Leggings", + "item.protectionengineering.engineer_saw_sword": "Engineer Saw Sword", "item.protectionengineering.extra_mechanical_arm": "Extra Mechanical Arm", "item.protectionengineering.heavy_exoskeleton": "Heavy Exoskeleton", "item.protectionengineering.hormone_injector": "Hormone Injector", diff --git a/src/main/java/com/chemiofitor/protection_engineering/ProtectionEngineeringClient.java b/src/main/java/com/chemiofitor/protection_engineering/ProtectionEngineeringClient.java index 569ecaa..d06fa10 100644 --- a/src/main/java/com/chemiofitor/protection_engineering/ProtectionEngineeringClient.java +++ b/src/main/java/com/chemiofitor/protection_engineering/ProtectionEngineeringClient.java @@ -1,19 +1,28 @@ package com.chemiofitor.protection_engineering; -import net.minecraft.client.Minecraft; +import com.chemiofitor.protection_engineering.registry.PEItems; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.resources.ResourceLocation; import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.ModContainer; -import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; -import net.neoforged.neoforge.client.gui.ConfigurationScreen; -import net.neoforged.neoforge.client.gui.IConfigScreenFactory; +import net.neoforged.bus.api.SubscribeEvent; @Mod(value = ProtectionEngineering.MODID, dist = Dist.CLIENT) public class ProtectionEngineeringClient { public ProtectionEngineeringClient(ModContainer container) { + container.getEventBus().register(this); + } + @SubscribeEvent + private void onClientSetup(FMLClientSetupEvent event) { + event.enqueueWork(() -> { + ItemProperties.register(PEItems.ENGINEER_SHIELD.get(), + ResourceLocation.withDefaultNamespace("blocking"), + (stack, level, entity, seed) -> + entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F); + }); } } diff --git a/src/main/java/com/chemiofitor/protection_engineering/item/EngineerSawSwordItem.java b/src/main/java/com/chemiofitor/protection_engineering/item/EngineerSawSwordItem.java new file mode 100644 index 0000000..55b555a --- /dev/null +++ b/src/main/java/com/chemiofitor/protection_engineering/item/EngineerSawSwordItem.java @@ -0,0 +1,116 @@ +package com.chemiofitor.protection_engineering.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.ItemAbility; + +import java.util.Optional; + +/** + * 工程师链锯剑 — 等同钻石剑伤害/攻速,下界合金耐久。 + * 攻击冷却未满也能横扫,可砍树(斧头工具),兼容剑+斧附魔。 + */ +public class EngineerSawSwordItem extends SwordItem { + + /** 与钻石剑相同的属性,耐久用下界合金 */ + public static final Tier TIER = new Tier() { + @Override public int getUses() { return 2031; } // 下界合金耐久 + @Override public float getSpeed() { return 8.0F; } // 钻石工具挖掘速度 + @Override public float getAttackDamageBonus() { return 3.0F; } // 钻石剑 +3 + @Override public int getEnchantmentValue() { return 15; } // 钻石附魔能力 + @Override public net.minecraft.tags.TagKey getIncorrectBlocksForDrops() { + return net.minecraft.tags.BlockTags.INCORRECT_FOR_DIAMOND_TOOL; + } + @Override public net.minecraft.world.item.crafting.Ingredient getRepairIngredient() { + return net.minecraft.world.item.crafting.Ingredient.of(Items.DIAMOND); + } + }; + + public EngineerSawSwordItem(Properties properties) { + super(TIER, properties.attributes(SwordItem.createAttributes(TIER, 3.0F, -2.4F))); + } + + // ── 视为斧头(砍树) ────────────────────────────────────── + + @Override + public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) { + return state.is(net.minecraft.tags.BlockTags.MINEABLE_WITH_AXE) + || super.isCorrectToolForDrops(stack, state); + } + + @Override + public float getDestroySpeed(ItemStack stack, BlockState state) { + if (state.is(net.minecraft.tags.BlockTags.MINEABLE_WITH_AXE)) { + return TIER.getSpeed(); + } + return super.getDestroySpeed(stack, state); + } + + // ── 斧头动作:useOn 剥皮/刮铜/去蜡 ──────────────────────── + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Player player = context.getPlayer(); + BlockState state = level.getBlockState(pos); + + Optional stripped = Optional.ofNullable( + state.getToolModifiedState(context, ItemAbilities.AXE_STRIP, false)); + if (stripped.isPresent()) { + level.playSound(player, pos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); + } else { + stripped = Optional.ofNullable( + state.getToolModifiedState(context, ItemAbilities.AXE_SCRAPE, false)); + if (stripped.isPresent()) { + level.playSound(player, pos, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F); + level.levelEvent(player, 3005, pos, 0); + } else { + stripped = Optional.ofNullable( + state.getToolModifiedState(context, ItemAbilities.AXE_WAX_OFF, false)); + if (stripped.isPresent()) { + level.playSound(player, pos, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F); + level.levelEvent(player, 3004, pos, 0); + } + } + } + + if (stripped.isPresent()) { + if (player instanceof ServerPlayer sp) { + CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(sp, pos, context.getItemInHand()); + } + level.setBlock(pos, stripped.get(), 11); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(player, stripped.get())); + if (player != null) { + context.getItemInHand().hurtAndBreak(1, player, + LivingEntity.getSlotForHand(context.getHand())); + } + return InteractionResult.sidedSuccess(level.isClientSide); + } + return InteractionResult.PASS; + } + + @Override + public boolean canPerformAction(ItemStack stack, ItemAbility ability) { + return ItemAbilities.DEFAULT_AXE_ACTIONS.contains(ability) + || ItemAbilities.DEFAULT_SWORD_ACTIONS.contains(ability); + } + + // ── 兼容剑+斧附魔 ───────────────────────────────────────── + + @Override + public boolean isEnchantable(ItemStack stack) { return true; } + +} diff --git a/src/main/java/com/chemiofitor/protection_engineering/item/EngineerShieldItem.java b/src/main/java/com/chemiofitor/protection_engineering/item/EngineerShieldItem.java new file mode 100644 index 0000000..7de4d3c --- /dev/null +++ b/src/main/java/com/chemiofitor/protection_engineering/item/EngineerShieldItem.java @@ -0,0 +1,55 @@ +package com.chemiofitor.protection_engineering.item; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.DispenserBlock; + +/** + * 工程师盾牌 — 3×耐久,斧头破防禁用减半,防护范围 +20%。 + */ +public class EngineerShieldItem extends Item implements Equipable { + + public static final int COOLDOWN_TICKS = 50; // 原版 100 的一半 + + public EngineerShieldItem(Properties properties) { + super(properties); + DispenserBlock.registerBehavior(this, ArmorItem.DISPENSE_ITEM_BEHAVIOR); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.BLOCK; + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 72000; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); + player.startUsingItem(hand); + return InteractionResultHolder.consume(itemstack); + } + + @Override + public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) { + return repair.is(net.minecraft.tags.ItemTags.PLANKS) || super.isValidRepairItem(toRepair, repair); + } + + @Override + public EquipmentSlot getEquipmentSlot() { + return EquipmentSlot.OFFHAND; + } + + @Override + public boolean canPerformAction(ItemStack stack, net.neoforged.neoforge.common.ItemAbility itemAbility) { + return net.neoforged.neoforge.common.ItemAbilities.DEFAULT_SHIELD_ACTIONS.contains(itemAbility); + } +} diff --git a/src/main/java/com/chemiofitor/protection_engineering/mixin/PlayerShieldMixin.java b/src/main/java/com/chemiofitor/protection_engineering/mixin/PlayerShieldMixin.java new file mode 100644 index 0000000..b3800dc --- /dev/null +++ b/src/main/java/com/chemiofitor/protection_engineering/mixin/PlayerShieldMixin.java @@ -0,0 +1,25 @@ +package com.chemiofitor.protection_engineering.mixin; + +import com.chemiofitor.protection_engineering.item.EngineerShieldItem; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(Player.class) +public class PlayerShieldMixin { + + /** 工程师盾牌斧头破防禁用时间减半:100 → 50 tick */ + @ModifyArg(method = "disableShield", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemCooldowns;addCooldown(Lnet/minecraft/world/item/Item;I)V"), + index = 1) + private int pe_modifyShieldCooldown(int originalDuration) { + Player self = (Player) (Object) this; + ItemStack useItem = self.getUseItem(); + if (useItem.getItem() instanceof EngineerShieldItem) { + return EngineerShieldItem.COOLDOWN_TICKS; + } + return originalDuration; + } +} diff --git a/src/main/java/com/chemiofitor/protection_engineering/mixin/ShieldAngleMixin.java b/src/main/java/com/chemiofitor/protection_engineering/mixin/ShieldAngleMixin.java new file mode 100644 index 0000000..fbc3c8d --- /dev/null +++ b/src/main/java/com/chemiofitor/protection_engineering/mixin/ShieldAngleMixin.java @@ -0,0 +1,38 @@ +package com.chemiofitor.protection_engineering.mixin; + +import com.chemiofitor.protection_engineering.item.EngineerShieldItem; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public class ShieldAngleMixin { + + /** 工程师盾牌防护范围 +20%(180° → 216°) */ + @Inject(method = "isDamageSourceBlocked", at = @At("HEAD"), cancellable = true) + private void pe_widenShieldAngle(DamageSource source, CallbackInfoReturnable cir) { + LivingEntity self = (LivingEntity) (Object) this; + if (!(self instanceof Player player)) return; + if (!(player.getUseItem().getItem() instanceof EngineerShieldItem)) return; + if (!player.isBlocking()) return; + + if (source.is(net.minecraft.tags.DamageTypeTags.BYPASSES_SHIELD)) return; + if (source.getDirectEntity() instanceof net.minecraft.world.entity.projectile.AbstractArrow a + && a.getPierceLevel() > 0) return; + + Vec3 srcPos = source.getSourcePosition(); + if (srcPos == null) return; + + Vec3 look = player.calculateViewVector(0.0F, player.getYHeadRot()); + Vec3 toPlayer = srcPos.vectorTo(player.position()); + toPlayer = new Vec3(toPlayer.x, 0.0, toPlayer.z).normalize(); + + // 原版 < 0.0(180°),加宽到 < 0.309(216°) + cir.setReturnValue(toPlayer.dot(look) < 0.309); + } +} diff --git a/src/main/java/com/chemiofitor/protection_engineering/registry/PEItems.java b/src/main/java/com/chemiofitor/protection_engineering/registry/PEItems.java index 0fc12c1..245af10 100644 --- a/src/main/java/com/chemiofitor/protection_engineering/registry/PEItems.java +++ b/src/main/java/com/chemiofitor/protection_engineering/registry/PEItems.java @@ -1,48 +1,13 @@ package com.chemiofitor.protection_engineering.registry; -import com.chemiofitor.protection_engineering.item.AdvancedApsItem; -import com.chemiofitor.protection_engineering.item.AirFilterItem; -import com.chemiofitor.protection_engineering.item.ApsItem; -import com.chemiofitor.protection_engineering.item.SimpleAttachmentItem; -import com.chemiofitor.protection_engineering.api.SlotTypes; -import com.chemiofitor.protection_engineering.item.DivingDeviceItem; -import com.chemiofitor.protection_engineering.item.EngineerBootsItem; -import com.chemiofitor.protection_engineering.item.EngineerChestplateItem; -import com.chemiofitor.protection_engineering.item.EngineerGogglesItem; -import com.chemiofitor.protection_engineering.item.EngineerHoodItem; -import com.chemiofitor.protection_engineering.item.EngineerLeggingsItem; -import com.chemiofitor.protection_engineering.item.DodgeJetpackItem; -import com.chemiofitor.protection_engineering.item.JetpackItem; -import com.chemiofitor.protection_engineering.item.MomentumJetpackItem; -import com.chemiofitor.protection_engineering.item.ExtraMechanicalArmItem; -import com.chemiofitor.protection_engineering.item.CushionedKneecapItem; -import com.chemiofitor.protection_engineering.item.CushionedSolesItem; -import com.chemiofitor.protection_engineering.item.ImprovedSolesItem; -import com.chemiofitor.protection_engineering.item.InsulatedSolesItem; -import com.chemiofitor.protection_engineering.item.HeavyExoskeletonItem; -import com.chemiofitor.protection_engineering.item.HormoneInjectorItem; -import com.chemiofitor.protection_engineering.item.SpyglassItem; -import com.chemiofitor.protection_engineering.item.LightExoskeletonItem; -import com.chemiofitor.protection_engineering.item.MechaKnuckleItem; -import com.chemiofitor.protection_engineering.item.MissileItem; -import com.chemiofitor.protection_engineering.item.MissilePackItem; -import com.chemiofitor.protection_engineering.item.NetheritePlateItem; -import com.chemiofitor.protection_engineering.item.NightVisionGogglesItem; -import com.chemiofitor.protection_engineering.item.RocketLauncherItem; -import com.chemiofitor.protection_engineering.item.SturdyPlateItem; +import com.chemiofitor.protection_engineering.item.*; +import com.simibubi.create.foundation.data.AssetLookup; import com.tterrag.registrate.util.entry.ItemEntry; -import net.minecraft.core.Holder; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.item.Item; - import net.minecraft.world.item.ArmorItem; -import java.util.Set; - +import static com.chemiofitor.protection_engineering.ProtectionEngineering.REGISTRATE; import static com.chemiofitor.protection_engineering.registry.PEArmorMaterials.DURABILITY_FACTOR; import static com.chemiofitor.protection_engineering.registry.PEArmorMaterials.ENGINEER_ARMOR; -import static com.chemiofitor.protection_engineering.ProtectionEngineering.REGISTRATE; /** * 所有物品的集中注册点。 @@ -186,6 +151,13 @@ public class PEItems { .properties(p -> p.stacksTo(16)) .register(); + public static final ItemEntry ENGINEER_SAW_SWORD = REGISTRATE + .item("engineer_saw_sword", EngineerSawSwordItem::new) + .lang("Engineer Saw Sword") + .model(AssetLookup.existingItemModel()) + .properties(p -> p.stacksTo(1).fireResistant()) + .register(); + // ══════════════════════════════════════════════════════════════ // 胸甲附件 — 手臂 (2) — ARM // ══════════════════════════════════════════════════════════════ @@ -238,6 +210,18 @@ public class PEItems { .properties(p -> p.stacksTo(1)) .register(); + // ══════════════════════════════════════════════════════════════ + // 武器 / 工具 (2) + // ══════════════════════════════════════════════════════════════ + + public static final ItemEntry ENGINEER_SHIELD = REGISTRATE + .item("engineer_shield", p -> new EngineerShieldItem( + p.durability(1008))) // 336 × 3 + .lang("Engineer Shield") + .model(AssetLookup.existingItemModel()) + .properties(p -> p.stacksTo(1)) + .register(); + // ══════════════════════════════════════════════════════════════ // 初始化 // ══════════════════════════════════════════════════════════════ diff --git a/src/main/resources/assets/protectionengineering/lang/zh_cn.json b/src/main/resources/assets/protectionengineering/lang/zh_cn.json index e2db2ea..df1bc19 100644 --- a/src/main/resources/assets/protectionengineering/lang/zh_cn.json +++ b/src/main/resources/assets/protectionengineering/lang/zh_cn.json @@ -27,6 +27,8 @@ "item.protectionengineering.missile_pack": "便携式导弹背包", "item.protectionengineering.rocket_launcher": "火箭发射器", "item.protectionengineering.missile": "制导导弹", + "item.protectionengineering.engineer_saw_sword": "工程师链锯剑", + "item.protectionengineering.engineer_shield": "工程师盾牌", "item.protectionengineering.extra_mechanical_arm": "额外机械臂", "item.protectionengineering.mechanical_gauntlet": "机械拳套", diff --git a/src/main/resources/assets/protectionengineering/models/item/engineer_saw_sword.json b/src/main/resources/assets/protectionengineering/models/item/engineer_saw_sword.json new file mode 100644 index 0000000..8e4ab7f --- /dev/null +++ b/src/main/resources/assets/protectionengineering/models/item/engineer_saw_sword.json @@ -0,0 +1,319 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "2": "protectionengineering:item/saw_sword" + }, + "elements": [ + { + "from": [7.5, -4, 7.5], + "to": [8.5, 2, 8.5], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [3.5, 5, 3, 8], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5, 3, 8, 3.5], "rotation": 270, "texture": "#2"}, + "south": {"uv": [3, 8, 2.5, 5], "texture": "#2"}, + "west": {"uv": [5, 3.5, 8, 4], "rotation": 90, "texture": "#2"}, + "down": {"uv": [3.5, 5, 4, 5.5], "texture": "#2"} + } + }, + { + "from": [7.25, 1.25, 6.5], + "to": [8.75, 3.25, 9.5], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [5, 4, 6, 5.5], "rotation": 270, "texture": "#2"}, + "south": {"uv": [6.5, 5.5, 6, 4.5], "texture": "#2"}, + "west": {"uv": [3.5, 5.5, 4.5, 7], "rotation": 90, "texture": "#2"}, + "up": {"uv": [5.5, 6, 6, 7.5], "rotation": 180, "texture": "#2"}, + "down": {"uv": [6, 6, 6.5, 7.5], "texture": "#2"} + } + }, + { + "from": [7.24802, 0.11612, 5.34835], + "to": [8.75202, 1.53033, 6.09835], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [7.5, 0, 6.5, 0.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8, 8, 8.5, 8.5], "rotation": 270, "texture": "#2"}, + "west": {"uv": [8.5, 0, 9, 0.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.25, 1.25, 5.5], + "to": [8.75, 2.25, 6.5], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [9, 1.5, 8.5, 2], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8.5, 0.5, 9, 1], "rotation": 270, "texture": "#2"}, + "west": {"uv": [1.5, 8.5, 2, 9], "rotation": 90, "texture": "#2"}, + "down": {"uv": [8.5, 1, 9, 1.5], "texture": "#2"} + } + }, + { + "from": [7.5, 5.25, 6.25], + "to": [8.5, 18.25, 9.25], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [1, 3, 0.5, 9.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [0, 0, 6.5, 1.5], "rotation": 270, "texture": "#2"}, + "south": {"uv": [0.5, 9.5, 0, 3], "texture": "#2"}, + "west": {"uv": [0, 1.5, 6.5, 3], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.75, 5.25, 6.24803], + "to": [8.25, 18.25, 6.24803], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [1.5, 3, 1, 9.5], "rotation": 180, "texture": "#2"} + } + }, + { + "from": [7.75, 2.76637, 3.75596], + "to": [8.25, 2.76637, 5.75596], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "down": {"uv": [7, 0.5, 6.5, 1.5], "texture": "#2"} + } + }, + { + "from": [7.5, 3.25, 7], + "to": [8.5, 5.25, 8], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [7, 4.5, 6.5, 5.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [6.5, 1.5, 7.5, 2], "rotation": 270, "texture": "#2"}, + "west": {"uv": [6.5, 2, 7.5, 2.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.5, 18.25, 7.25], + "to": [8.5, 19.25, 9.25], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [7, 0.5, 7.5, 1.5], "rotation": 270, "texture": "#2"}, + "south": {"uv": [2.5, 9, 2, 8.5], "texture": "#2"}, + "west": {"uv": [3.5, 7, 4, 8], "rotation": 90, "texture": "#2"}, + "up": {"uv": [6.5, 6, 7, 7], "rotation": 180, "texture": "#2"} + } + }, + { + "from": [7.99902, 16.51513, 14.96494], + "to": [8.00102, 18.51513, 15.71494], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [6.5, 2.5, 7.5, 3], "rotation": 270, "texture": "#2"}, + "west": {"uv": [7, 4.5, 8, 5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 16.83693, 12.01924], + "to": [8.00102, 17.58693, 14.01924], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [4, 7, 4.5, 8], "rotation": 270, "texture": "#2"}, + "west": {"uv": [7, 6, 7.5, 7], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 14.98917, 11.25387], + "to": [8.00102, 15.73917, 13.25387], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [6.5, 7, 7, 8], "rotation": 270, "texture": "#2"}, + "west": {"uv": [7, 7, 7.5, 8], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 13.14141, 10.4885], + "to": [8.00102, 13.89141, 12.4885], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [7.5, 0, 8, 1], "rotation": 270, "texture": "#2"}, + "west": {"uv": [7.5, 1, 8, 2], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 11.29366, 9.72314], + "to": [8.00102, 12.04366, 11.72314], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [1.5, 7.5, 2, 8.5], "rotation": 270, "texture": "#2"}, + "west": {"uv": [2, 7.5, 2.5, 8.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 9.4459, 8.95777], + "to": [8.00102, 10.1959, 10.95777], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [7.5, 2, 8, 3], "rotation": 270, "texture": "#2"}, + "west": {"uv": [5.5, 7.5, 6, 8.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 7.59814, 8.1924], + "to": [8.00102, 8.34814, 10.1924], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [6, 7.5, 6.5, 8.5], "rotation": 270, "texture": "#2"}, + "west": {"uv": [7.5, 6, 8, 7], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.99902, 5.75038, 7.42704], + "to": [8.00102, 6.50038, 9.42704], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [7.5, 7, 8, 8], "rotation": 270, "texture": "#2"}, + "west": {"uv": [8, 0, 8.5, 1], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.75, 19.25205, 7.25], + "to": [8.25, 19.25205, 9], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "up": {"uv": [8, 1, 8.5, 2], "rotation": 180, "texture": "#2"} + } + }, + { + "from": [7.75, 11.95876, -5.43643], + "to": [8.25, 13.37581, -5.43643], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [8.5, 2.5, 9, 3], "texture": "#2"} + } + }, + { + "from": [7.49802, 11.96015, -5.43503], + "to": [8.50202, 13.37436, -4.43503], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [8.5, 3, 9, 3.5], "texture": "#2"}, + "east": {"uv": [3.5, 8.5, 4, 9], "texture": "#2"}, + "west": {"uv": [4, 8.5, 4.5, 9], "texture": "#2"} + } + }, + { + "from": [7.99802, 12.58016, -6.14083], + "to": [8.00202, 13.33016, -4.14083], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [7, 5, 8, 5.5], "texture": "#2"}, + "west": {"uv": [8, 2, 9, 2.5], "texture": "#2"} + } + }, + { + "from": [7.49802, 2.76777, 3.75736], + "to": [8.50202, 3.76777, 5.75736], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [2.5, 8, 3, 9], "rotation": 270, "texture": "#2"}, + "west": {"uv": [3, 8, 3.5, 9], "rotation": 90, "texture": "#2"}, + "down": {"uv": [8, 2.5, 8.5, 3.5], "texture": "#2"} + } + }, + { + "from": [7.99802, 3.21978, 5.19972], + "to": [8.00202, 5.21978, 5.94972], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [3.5, 8, 4.5, 8.5], "rotation": 270, "texture": "#2"}, + "west": {"uv": [8, 3.5, 9, 4], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.25, 3.25, 7.5], + "to": [8.75, 8.25, 9.5], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [5.5, 5.5, 5, 8], "rotation": 180, "texture": "#2"}, + "east": {"uv": [1.5, 3, 4, 4], "rotation": 270, "texture": "#2"}, + "south": {"uv": [5, 8, 4.5, 5.5], "texture": "#2"}, + "west": {"uv": [1.5, 4, 4, 5], "rotation": 90, "texture": "#2"}, + "up": {"uv": [4.5, 8, 5, 9], "rotation": 180, "texture": "#2"}, + "down": {"uv": [8, 4.5, 8.5, 5.5], "texture": "#2"} + } + }, + { + "from": [7.25, -3.75, 6.5], + "to": [8.75, -3, 8.75], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [9, 4.5, 8.5, 5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [8, 5.5, 8.5, 6.5], "rotation": 270, "texture": "#2"}, + "south": {"uv": [9, 4.5, 8.5, 4], "texture": "#2"}, + "west": {"uv": [8, 6.5, 8.5, 7.5], "rotation": 90, "texture": "#2"}, + "up": {"uv": [5, 8, 5.5, 9], "rotation": 180, "texture": "#2"}, + "down": {"uv": [6.5, 8, 7, 9], "texture": "#2"} + } + }, + { + "from": [7.24702, -2.75, 5.498], + "to": [8.75302, 2.25, 6.248], + "rotation": {"angle": 0, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "north": {"uv": [2.5, 5, 1.5, 7.5], "rotation": 180, "texture": "#2"}, + "east": {"uv": [5.5, 5.5, 8, 6], "rotation": 270, "texture": "#2"}, + "south": {"uv": [5, 5.5, 4, 3], "texture": "#2"}, + "west": {"uv": [6, 4, 8.5, 4.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [7.24802, -3.41942, 8.88388], + "to": [8.75202, -2.66942, 10.29809], + "rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1, 8]}, + "faces": { + "east": {"uv": [8.5, 5, 9, 5.5], "texture": "#2"}, + "west": {"uv": [5.5, 8.5, 6, 9], "texture": "#2"}, + "up": {"uv": [8, 8.5, 7, 8], "texture": "#2"}, + "down": {"uv": [9, 7.5, 8, 8], "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [-0.5, 6.75, 1.5] + }, + "thirdperson_lefthand": { + "translation": [-0.5, 6.75, 1.5] + }, + "firstperson_righthand": { + "rotation": [-9, 12, 0], + "translation": [0, 6, 0] + }, + "firstperson_lefthand": { + "rotation": [-9, 12, 0], + "translation": [0, 6, 0] + }, + "ground": { + "rotation": [-45, 0, 0], + "translation": [0, 5, 0], + "scale": [0.75, 0.75, 0.75] + }, + "gui": { + "rotation": [90, 45, -90], + "translation": [0.25, -0.25, 0], + "scale": [0.8, 0.8, 0.8] + }, + "head": { + "translation": [0, 18, 0] + }, + "fixed": { + "rotation": [90, -45, 90], + "translation": [-0.5, -0.25, 0.25], + "scale": [0.8, 0.8, 0.8] + } + }, + "groups": [ + { + "name": "SawSword", + "origin": [8, 5, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/protectionengineering/models/item/engineer_shield.json b/src/main/resources/assets/protectionengineering/models/item/engineer_shield.json new file mode 100644 index 0000000..db0d983 --- /dev/null +++ b/src/main/resources/assets/protectionengineering/models/item/engineer_shield.json @@ -0,0 +1,247 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "1": "protectionengineering:item/shield" + }, + "elements": [ + { + "name": "RightShieldDownUp", + "from": [-1, 18.5, 8.5], + "to": [8, 24.5, 8.502], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [9.75, 7.25, 7.5, 8.75], "texture": "#1"}, + "south": {"uv": [9.75, 7, 7.5, 5.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShield", + "from": [7, 8.5, 6.5], + "to": [9, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [0.5, 8.25, 0, 10.75], "texture": "#1"}, + "east": {"uv": [8, 0.75, 10.5, 1.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [8.5, 4, 8, 1.5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8, 0, 10.5, 0.5], "rotation": 90, "texture": "#1"}, + "up": {"uv": [2.75, 11, 3.25, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [2, 11, 2.5, 11.5], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [9, 8.504, 7.5], + "to": [18, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.75, 0, 5.5, 2.5], "texture": "#1"}, + "south": {"uv": [2.25, 8, 0, 5.5], "rotation": 180, "texture": "#1"}, + "up": {"uv": [10, 7.5, 12.25, 7.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10, 7, 12.25, 7.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [18, 8.504, 6.5], + "to": [19, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [4.25, 8.25, 4, 10.75], "texture": "#1"}, + "east": {"uv": [0.75, 8.25, 3.25, 8.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [3.75, 10.75, 3.5, 8.25], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8, 4.25, 10.5, 4.75], "rotation": 90, "texture": "#1"}, + "up": {"uv": [3.5, 11, 3.75, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [4.5, 8.25, 4.75, 8.75], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [-2, 17.504, 6.5], + "to": [7, 18.504, 7.5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [12.25, 9, 10, 9.25], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 10, 11, 10.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [12.25, 8.75, 10, 8.5], "texture": "#1"}, + "west": {"uv": [6, 11, 6.25, 11.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [10, 8, 12.25, 8.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8.25, 10, 10.5, 10.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUpDown", + "from": [8, -1.492, 8], + "to": [18, 8.504, 8.996], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [2.5, 2.75, 0, 5.25], "texture": "#1"}, + "east": {"uv": [8.75, 3.5, 11.25, 3.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [2.5, 2.5, 0, 0], "rotation": 180, "texture": "#1"}, + "up": {"uv": [8.75, 3, 11.25, 3.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8, 5, 10.5, 5.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [-2, 17.504, 8], + "to": [-1, 24.5, 8.996], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [0.75, 11, 0.5, 12.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 1, 12.5, 1.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [0.25, 12.75, 0, 11], "texture": "#1"}, + "west": {"uv": [10.75, 4, 12.5, 4.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6.5, 11, 6.75, 11.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [-2, 24.5, 8], + "to": [8, 25.5, 9], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [9.75, 9.25, 7.25, 9], "rotation": 180, "texture": "#1"}, + "south": {"uv": [3.25, 9.5, 0.75, 9.75], "texture": "#1"}, + "west": {"uv": [7, 11, 7.25, 11.25], "rotation": 270, "texture": "#1"}, + "up": {"uv": [4.5, 9, 7, 9.25], "texture": "#1"}, + "down": {"uv": [0.75, 9, 3.25, 9.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [8, 18.5, 8.5], + "to": [17, 24.5, 8.502], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.25, 7.25, 5, 8.75], "texture": "#1"}, + "south": {"uv": [7.25, 7, 5, 5.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [-2, 8.504, 7.5], + "to": [7, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.75, 2.75, 5.5, 5.25], "texture": "#1"}, + "south": {"uv": [4.75, 8, 2.5, 5.5], "rotation": 180, "texture": "#1"}, + "up": {"uv": [5.5, 10.5, 7.75, 10.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0.75, 10.5, 3, 10.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [-3, 8.504, 6.5], + "to": [-2, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [5.25, 9.5, 5, 12], "texture": "#1"}, + "east": {"uv": [8.75, 2.25, 11.25, 2.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [4.75, 12, 4.5, 9.5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8.75, 1.5, 11.25, 2], "rotation": 90, "texture": "#1"}, + "up": {"uv": [5.5, 11, 5.75, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [4, 11, 4.25, 11.5], "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [9, 17.504, 6.5], + "to": [18, 18.504, 7.5], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [13, 0.5, 10.75, 0.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [7.5, 11, 7.75, 11.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [13, 0.25, 10.75, 0], "texture": "#1"}, + "west": {"uv": [8, 11, 8.25, 11.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8, 10.5, 10.25, 10.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10.5, 10.5, 12.75, 10.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDownDown", + "from": [-2, -1.492, 8], + "to": [8, 8.504, 8.996], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [5.25, 2.75, 2.75, 5.25], "texture": "#1"}, + "south": {"uv": [5.25, 2.5, 2.75, 0], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8.25, 9.5, 10.75, 9.75], "rotation": 90, "texture": "#1"}, + "up": {"uv": [0.75, 10, 3.25, 10.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [5.5, 9.5, 8, 9.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDownUp", + "from": [17, 17.504, 8], + "to": [18, 24.5, 8.996], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [1.75, 11, 1.5, 12.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 4.5, 12.5, 4.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [1.25, 12.75, 1, 11], "texture": "#1"}, + "west": {"uv": [10.75, 5, 12.5, 5.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8.5, 11, 8.75, 11.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldDownUp", + "from": [8, 24.5, 8], + "to": [18, 25.5, 8.996], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [12.5, 6.25, 10, 6], "rotation": 180, "texture": "#1"}, + "east": {"uv": [9, 11, 9.25, 11.25], "rotation": 90, "texture": "#1"}, + "south": {"uv": [12.5, 6.5, 10, 6.75], "texture": "#1"}, + "up": {"uv": [10, 5.5, 12.5, 5.75], "texture": "#1"}, + "down": {"uv": [5.5, 10, 8, 10.25], "rotation": 180, "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -90, 0], + "translation": [2.5, -4.5, 3], + "scale": [0.8, 0.8, 0.8] + }, + "thirdperson_lefthand": { + "rotation": [0, -90, 0], + "translation": [2.5, -4.5, 3], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_righthand": { + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_lefthand": { + "scale": [0.8, 0.8, 0.8] + }, + "ground": { + "translation": [0, 6, 0], + "scale": [0.6, 0.6, 0.6] + }, + "gui": { + "rotation": [15, 135, 5], + "translation": [0, -2, 0], + "scale": [0.5, 0.5, 0.5] + }, + "head": { + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "translation": [0, -2.25, 0.25], + "scale": [0.6, 0.6, 0.6] + } + }, + "overrides": [ + {"predicate": {"blocking": 1}, "model": "protectionengineering:item/engineer_shield_blocking"} + ], + "groups": [ + { + "name": "Shield", + "origin": [8, 9.5, 8.501], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/protectionengineering/models/item/engineer_shield_blocking.json b/src/main/resources/assets/protectionengineering/models/item/engineer_shield_blocking.json new file mode 100644 index 0000000..dfd71c7 --- /dev/null +++ b/src/main/resources/assets/protectionengineering/models/item/engineer_shield_blocking.json @@ -0,0 +1,248 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "1": "protectionengineering:item/shield" + }, + "elements": [ + { + "name": "RightShieldDownUp", + "from": [-1, 18.5, 8.5], + "to": [8, 24.5, 8.502], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [9.75, 7.25, 7.5, 8.75], "texture": "#1"}, + "south": {"uv": [9.75, 7, 7.5, 5.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShield", + "from": [7, 8.5, 6.5], + "to": [9, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [0.5, 8.25, 0, 10.75], "texture": "#1"}, + "east": {"uv": [8, 0.75, 10.5, 1.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [8.5, 4, 8, 1.5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8, 0, 10.5, 0.5], "rotation": 90, "texture": "#1"}, + "up": {"uv": [2.75, 11, 3.25, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [2, 11, 2.5, 11.5], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [9, 8.504, 7.5], + "to": [18, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.75, 0, 5.5, 2.5], "texture": "#1"}, + "south": {"uv": [2.25, 8, 0, 5.5], "rotation": 180, "texture": "#1"}, + "up": {"uv": [10, 7.5, 12.25, 7.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10, 7, 12.25, 7.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [18, 8.504, 6.5], + "to": [19, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [4.25, 8.25, 4, 10.75], "texture": "#1"}, + "east": {"uv": [0.75, 8.25, 3.25, 8.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [3.75, 10.75, 3.5, 8.25], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8, 4.25, 10.5, 4.75], "rotation": 90, "texture": "#1"}, + "up": {"uv": [3.5, 11, 3.75, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [4.5, 8.25, 4.75, 8.75], "texture": "#1"} + } + }, + { + "name": "RightShieldUp", + "from": [-2, 17.504, 6.5], + "to": [7, 18.504, 7.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [12.25, 9, 10, 9.25], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 10, 11, 10.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [12.25, 8.75, 10, 8.5], "texture": "#1"}, + "west": {"uv": [6, 11, 6.25, 11.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [10, 8, 12.25, 8.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8.25, 10, 10.5, 10.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUpDown", + "from": [8, -1.492, 8], + "to": [18, 8.504, 8.996], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [2.5, 2.75, 0, 5.25], "texture": "#1"}, + "east": {"uv": [8.75, 3.5, 11.25, 3.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [2.5, 2.5, 0, 0], "rotation": 180, "texture": "#1"}, + "up": {"uv": [8.75, 3, 11.25, 3.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8, 5, 10.5, 5.25], "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [-2, 17.504, 8], + "to": [-1, 24.5, 8.996], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [0.75, 11, 0.5, 12.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 1, 12.5, 1.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [0.25, 12.75, 0, 11], "texture": "#1"}, + "west": {"uv": [10.75, 4, 12.5, 4.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6.5, 11, 6.75, 11.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [-2, 24.5, 8], + "to": [8, 25.5, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [9.75, 9.25, 7.25, 9], "rotation": 180, "texture": "#1"}, + "south": {"uv": [3.25, 9.5, 0.75, 9.75], "texture": "#1"}, + "west": {"uv": [7, 11, 7.25, 11.25], "rotation": 270, "texture": "#1"}, + "up": {"uv": [4.5, 9, 7, 9.25], "texture": "#1"}, + "down": {"uv": [0.75, 9, 3.25, 9.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldUpUp", + "from": [8, 18.5, 8.5], + "to": [17, 24.5, 8.502], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.25, 7.25, 5, 8.75], "texture": "#1"}, + "south": {"uv": [7.25, 7, 5, 5.5], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [-2, 8.504, 7.5], + "to": [7, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [7.75, 2.75, 5.5, 5.25], "texture": "#1"}, + "south": {"uv": [4.75, 8, 2.5, 5.5], "rotation": 180, "texture": "#1"}, + "up": {"uv": [5.5, 10.5, 7.75, 10.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0.75, 10.5, 3, 10.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [-3, 8.504, 6.5], + "to": [-2, 18.504, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [5.25, 9.5, 5, 12], "texture": "#1"}, + "east": {"uv": [8.75, 2.25, 11.25, 2.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [4.75, 12, 4.5, 9.5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8.75, 1.5, 11.25, 2], "rotation": 90, "texture": "#1"}, + "up": {"uv": [5.5, 11, 5.75, 11.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [4, 11, 4.25, 11.5], "texture": "#1"} + } + }, + { + "name": "RightShieldDown", + "from": [9, 17.504, 6.5], + "to": [18, 18.504, 7.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [13, 0.5, 10.75, 0.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [7.5, 11, 7.75, 11.25], "rotation": 270, "texture": "#1"}, + "south": {"uv": [13, 0.25, 10.75, 0], "texture": "#1"}, + "west": {"uv": [8, 11, 8.25, 11.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8, 10.5, 10.25, 10.75], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10.5, 10.5, 12.75, 10.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDownDown", + "from": [-2, -1.492, 8], + "to": [8, 8.504, 8.996], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [5.25, 2.75, 2.75, 5.25], "texture": "#1"}, + "south": {"uv": [5.25, 2.5, 2.75, 0], "rotation": 180, "texture": "#1"}, + "west": {"uv": [8.25, 9.5, 10.75, 9.75], "rotation": 90, "texture": "#1"}, + "up": {"uv": [0.75, 10, 3.25, 10.25], "rotation": 180, "texture": "#1"}, + "down": {"uv": [5.5, 9.5, 8, 9.75], "texture": "#1"} + } + }, + { + "name": "RightShieldDownUp", + "from": [17, 17.504, 8], + "to": [18, 24.5, 8.996], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [1.75, 11, 1.5, 12.75], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10.75, 4.5, 12.5, 4.75], "rotation": 270, "texture": "#1"}, + "south": {"uv": [1.25, 12.75, 1, 11], "texture": "#1"}, + "west": {"uv": [10.75, 5, 12.5, 5.25], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8.5, 11, 8.75, 11.25], "rotation": 180, "texture": "#1"} + } + }, + { + "name": "RightShieldDownUp", + "from": [8, 24.5, 8], + "to": [18, 25.5, 8.996], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.253, 7.7505]}, + "faces": { + "north": {"uv": [12.5, 6.25, 10, 6], "rotation": 180, "texture": "#1"}, + "east": {"uv": [9, 11, 9.25, 11.25], "rotation": 90, "texture": "#1"}, + "south": {"uv": [12.5, 6.5, 10, 6.75], "texture": "#1"}, + "up": {"uv": [10, 5.5, 12.5, 5.75], "texture": "#1"}, + "down": {"uv": [5.5, 10, 8, 10.25], "rotation": 180, "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [15, -45, 0], + "translation": [0.25, -4.5, -2.5], + "scale": [0.8, 0.8, 0.8] + }, + "thirdperson_lefthand": { + "rotation": [15, -45, 0], + "translation": [0.25, -4.5, -2.5], + "scale": [0.8, 0.8, 0.8] + }, + "firstperson_righthand": { + "rotation": [0, 0, 22.5], + "translation": [-5, -1, 2.5], + "scale": [0.7, 0.7, 0.7] + }, + "firstperson_lefthand": { + "rotation": [0, 0, 22.5], + "translation": [-5, -1, 2.5], + "scale": [0.7, 0.7, 0.7] + }, + "ground": { + "translation": [0, 6, 0], + "scale": [0.6, 0.6, 0.6] + }, + "gui": { + "rotation": [15, 135, 5], + "translation": [0, -2, 0], + "scale": [0.5, 0.5, 0.5] + }, + "head": { + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "translation": [0, -2.25, 0.25], + "scale": [0.6, 0.6, 0.6] + } + }, + "groups": [ + { + "name": "Shield", + "origin": [8, 9.5, 8.501], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/protectionengineering/textures/item/saw_sword.png b/src/main/resources/assets/protectionengineering/textures/item/saw_sword.png new file mode 100644 index 0000000..1cba06a Binary files /dev/null and b/src/main/resources/assets/protectionengineering/textures/item/saw_sword.png differ diff --git a/src/main/resources/assets/protectionengineering/textures/item/shield.png b/src/main/resources/assets/protectionengineering/textures/item/shield.png new file mode 100644 index 0000000..c72369c Binary files /dev/null and b/src/main/resources/assets/protectionengineering/textures/item/shield.png differ diff --git a/src/main/resources/protectionengineering.mixins.json b/src/main/resources/protectionengineering.mixins.json index a91adca..6cd7e78 100644 --- a/src/main/resources/protectionengineering.mixins.json +++ b/src/main/resources/protectionengineering.mixins.json @@ -4,7 +4,9 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "LivingEntityMixin", - "ItemStackMixin" + "ItemStackMixin", + "PlayerShieldMixin", + "ShieldAngleMixin" ], "injectors": { "defaultRequire": 1