Fix server-side loading, add icons, add reciepes

This commit is contained in:
Azimkin
2025-11-19 18:26:05 +01:00
parent 69c235e5cc
commit 398d301643
49 changed files with 59866 additions and 10710 deletions

View File

@ -10,7 +10,7 @@ group = mod_group_id
version = mod_version
base {
archivesName = mod_id
archivesName = mod_name.replace(' ' as char, '_' as char)
}
java {

View File

@ -34,11 +34,11 @@ mapping_version=1.20.1
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=militaryarmor
# The human-readable display name for the mod.
mod_name=MilitaryArmor
mod_name=EOW Armor Pack
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved
# The mod version. See https://semver.org/
mod_version=0.1
mod_version=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

View File

@ -0,0 +1,34 @@
package top.azimkin.militaryarmor;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
import java.util.function.Supplier;
@OnlyIn(Dist.CLIENT)
public class ClientItemExtensions implements IClientItemExtensions {
private final Supplier<? extends GeoArmorRenderer<?>> rendererSupplier;
private GeoArmorRenderer<?> renderer;
protected ClientItemExtensions(Supplier<? extends GeoArmorRenderer<?>> renderSupplier) {
this.rendererSupplier = renderSupplier;
}
@Override
public @NotNull HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
if (renderer == null) {
renderer = rendererSupplier.get();
}
renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
return renderer;
}
}

View File

@ -0,0 +1,20 @@
package top.azimkin.militaryarmor;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import software.bernie.geckolib.constant.DefaultAnimations;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.object.PlayState;
@OnlyIn(Dist.CLIENT)
class CommonMilitaryAnimationController extends AnimationController<CommonMilitaryArmorItem> {
public CommonMilitaryAnimationController(CommonMilitaryArmorItem animatable) {
super(animatable, CommonMilitaryAnimationController::handler);
}
protected static PlayState handler(AnimationState<CommonMilitaryArmorItem> state) {
state.setAnimation(DefaultAnimations.IDLE);
return PlayState.CONTINUE;
}
}

View File

@ -1,25 +1,17 @@
package top.azimkin.militaryarmor;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.constant.DefaultAnimations;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class CommonMilitaryArmorItem extends ArmorItem implements GeoItem {
protected final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
@ -31,6 +23,7 @@ public class CommonMilitaryArmorItem extends ArmorItem implements GeoItem {
}
@Override
@OnlyIn(Dist.CLIENT)
public void initializeClient(@NotNull Consumer<IClientItemExtensions> consumer) {
consumer.accept(new ClientItemExtensions(() -> new CommonMilitaryArmorRenderer(armorName)));
}
@ -45,34 +38,4 @@ public class CommonMilitaryArmorItem extends ArmorItem implements GeoItem {
return cache;
}
protected static class ClientItemExtensions implements IClientItemExtensions {
private final Supplier<? extends GeoArmorRenderer<?>> rendererSupplier;
private GeoArmorRenderer<?> renderer;
protected ClientItemExtensions(Supplier<? extends GeoArmorRenderer<?>> renderSupplier) {
this.rendererSupplier = renderSupplier;
}
@Override
public @NotNull HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
if (renderer == null) {
renderer = rendererSupplier.get();
}
renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
return renderer;
}
}
protected static class CommonMilitaryAnimationController extends AnimationController<CommonMilitaryArmorItem> {
public CommonMilitaryAnimationController(CommonMilitaryArmorItem animatable) {
super(animatable, CommonMilitaryAnimationController::handler);
}
protected static PlayState handler(AnimationState<CommonMilitaryArmorItem> state) {
state.setAnimation(DefaultAnimations.IDLE);
return PlayState.CONTINUE;
}
}
}

View File

@ -1,10 +1,13 @@
package top.azimkin.militaryarmor;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import software.bernie.geckolib.core.animatable.GeoAnimatable;
import software.bernie.geckolib.model.DefaultedItemGeoModel;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
@OnlyIn(Dist.CLIENT)
public class CommonMilitaryArmorRenderer extends GeoArmorRenderer<CommonMilitaryArmorItem> {
public CommonMilitaryArmorRenderer(String armorName) {
super(prepareModel(armorName));

View File

@ -3,31 +3,25 @@ package top.azimkin.militaryarmor;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.RegistryObject;
import java.lang.reflect.Modifier;
import java.util.concurrent.ThreadLocalRandom;
@SuppressWarnings({"unused", "unchecked"})
public class ModCreativeTabs {
private static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MilitaryArmor.MOD_ID);
public static final RegistryObject<CreativeModeTab> MILITARY_ARMOR_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder()
.icon(() -> ModItems.VSU_HELMET_1.get().getDefaultInstance())
.icon(() -> ModItems.ITEM_LIST.get(ThreadLocalRandom.current().nextInt(ModItems.ITEM_LIST.size())).get().getDefaultInstance())
.title(Component.translatable("item_group." + MilitaryArmor.MOD_ID + ".main"))
.displayItems((parameters, output) -> {
try {
for (var f : ModItems.class.getDeclaredFields()) {
if (Modifier.isStatic(f.getModifiers()) && Modifier.isFinal(f.getModifiers()) && f.getType() == RegistryObject.class) {
output.accept(((RegistryObject<? extends Item>) f.get(null)).get());
}
}
} catch (Throwable throwable) {
MilitaryArmor.LOGGER.error("Error while trying to register items in a tab", throwable);
for (var i : ModItems.ITEM_LIST) {
output.accept(i.get());
}
}).build());
})
.build());
public static void register(IEventBus bus) {
CREATIVE_MODE_TABS.register(bus);

View File

@ -7,6 +7,10 @@ import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public final class ModItems {
private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MilitaryArmor.MOD_ID);
@ -14,115 +18,123 @@ public final class ModItems {
public static final RegistryObject<CommonMilitaryArmorItem> VSU_VEST_1 = ITEMS.register("vsu_vest_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"vsu_vest_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> VSU_HELMET_1 = ITEMS.register("vsu_helmet_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"vsu_helmet_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> VSU_VEST_2 = ITEMS.register("vsu_vest_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"vsu_vest_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> VSU_HELMET_2 = ITEMS.register("vsu_helmet_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"vsu_helmet_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> RUS_VEST_1 = ITEMS.register("rus_vest_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"rus_vest_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> RUS_HELMET_1 = ITEMS.register("rus_helmet_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"rus_helmet_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> RUS_VEST_2 = ITEMS.register("rus_vest_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"rus_vest_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> RUS_HELMET_2 = ITEMS.register("rus_helmet_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"rus_helmet_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> VEST_1 = ITEMS.register("vest_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"set_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> HELMET_1 = ITEMS.register("helmet_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(100),
new Item.Properties(),
"set_1"
));
public static final RegistryObject<CommonMilitaryArmorItem> VEST_2 = ITEMS.register("vest_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"set_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> HELMET_2 = ITEMS.register("helmet_2", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(200),
new Item.Properties(),
"set_2"
));
public static final RegistryObject<CommonMilitaryArmorItem> VEST_3 = ITEMS.register("vest_3", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(300),
new Item.Properties(),
"set_3"
));
public static final RegistryObject<CommonMilitaryArmorItem> HELMET_3 = ITEMS.register("helmet_3", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(300),
new Item.Properties(),
"set_3"
));
public static final RegistryObject<CommonMilitaryArmorItem> VEST_4 = ITEMS.register("vest_4", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(400),
new Item.Properties(),
"set_4"
));
public static final RegistryObject<CommonMilitaryArmorItem> HELMET_4 = ITEMS.register("helmet_4", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.HELMET,
new Item.Properties().defaultDurability(400),
new Item.Properties(),
"set_4"
));
/*public static final Object VSU_HELMET_1 = ITEMS.register("vsu_helmet_1", () -> new CommonMilitaryArmorItem(
ModArmorMaterials.COMMON_MILITARY,
ArmorItem.Type.CHESTPLATE,
new Item.Properties().defaultDurability(100),
"vsu_helmet_1"
));*/
public static final List<RegistryObject<? extends Item>> ITEM_LIST = new ArrayList<>();
@SuppressWarnings({"unused", "unchecked"})
public static void register(IEventBus modBus) {
ITEMS.register(modBus);
try {
for (var f : ModItems.class.getDeclaredFields()) {
if (Modifier.isStatic(f.getModifiers()) && Modifier.isFinal(f.getModifiers()) && f.getType() == RegistryObject.class) {
ITEM_LIST.add(((RegistryObject<? extends Item>) f.get(null)));
}
}
} catch (Throwable throwable) {
MilitaryArmor.LOGGER.error("Error while trying to register items in a tab", throwable);
}
}
}

View File

@ -1,12 +1,12 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.idle": {
"loop": true
},
"misc.idle": {
"loop": true
}
},
"geckolib_format_version": 2
"format_version": "1.8.0",
"animations": {
"animation.model.idle": {
"loop": true
},
"misc.idle": {
"loop": true
}
},
"geckolib_format_version": 2
}

View File

@ -1,16 +1,13 @@
{
"item_group.militaryarmor.main": "Military Armor",
"item_group.militaryarmor.main": "EOW Armor Pack",
"item.militaryarmor.vsu_vest_1": "AFU Vest 1",
"item.militaryarmor.vsu_helmet_1": "AFU Helmet 1",
"item.militaryarmor.vsu_vest_2": "AFU Vest 2",
"item.militaryarmor.vsu_helmet_2": "AFU Helmet 2",
"item.militaryarmor.rus_vest_1": "AFRF Vest 1",
"item.militaryarmor.rus_helmet_1": "AFRF Helmet 1",
"item.militaryarmor.rus_vest_2": "AFRF Vest 2",
"item.militaryarmor.rus_helmet_2": "AFRF Helmet 2",
"item.militaryarmor.vest_1": "Vest 1",
"item.militaryarmor.helmet_1": "Helmet 1",
"item.militaryarmor.vest_2": "Vest 2",

View File

@ -1,16 +1,13 @@
{
"item_group.militaryarmor.main": "Military Armor",
"item_group.militaryarmor.main": "EOW Armor Pack",
"item.militaryarmor.vsu_helmet_1": "ВСУ шлем 1",
"item.militaryarmor.vsu_helmet_2": "ВСУ шлем 2",
"item.militaryarmor.vsu_vest_1": "ВСУ бронежилет 1",
"item.militaryarmor.vsu_vest_2": "ВСУ бронежилет 2",
"item.militaryarmor.rus_helmet_1": "ВСРФ шлем 1",
"item.militaryarmor.rus_helmet_2": "ВСРФ шлем 2",
"item.militaryarmor.rus_vest_1": "ВСРФ бронежилет 1",
"item.militaryarmor.rus_vest_2": "ВСРФ бронежилет 2",
"item.militaryarmor.vest_1": "Бронежилет 1",
"item.militaryarmor.helmet_1": "Шлем 1",
"item.militaryarmor.vest_2": "Бронежилет 2",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:green_stained_glass"
}
},
"result": {
"item": "militaryarmor:helmet_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:lime_stained_glass"
}
},
"result": {
"item": "militaryarmor:helmet_2"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:gray_stained_glass"
}
},
"result": {
"item": "militaryarmor:helmet_3"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:black_stained_glass"
}
},
"result": {
"item": "militaryarmor:helmet_4"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:red_stained_glass"
}
},
"result": {
"item": "militaryarmor:rus_helmet_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:pink_stained_glass"
}
},
"result": {
"item": "militaryarmor:rus_helmet_2"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:red_stained_glass"
}
},
"result": {
"item": "militaryarmor:rus_vest_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:pink_stained_glass"
}
},
"result": {
"item": "militaryarmor:rus_vest_2"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:green_stained_glass"
}
},
"result": {
"item": "militaryarmor:vest_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:lime_stained_glass"
}
},
"result": {
"item": "militaryarmor:vest_2"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:gray_stained_glass"
}
},
"result": {
"item": "militaryarmor:vest_3"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:black_stained_glass"
}
},
"result": {
"item": "militaryarmor:vest_4"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:yellow_stained_glass"
}
},
"result": {
"item": "militaryarmor:vsu_helmet_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"###",
"#=#",
" "
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:orange_stained_glass"
}
},
"result": {
"item": "militaryarmor:vsu_helmet_2"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:yellow_stained_glass"
}
},
"result": {
"item": "militaryarmor:vsu_vest_1"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"#=#",
"###",
"###"
],
"key": {
"#": {
"item": "minecraft:diamond"
},
"=": {
"item": "minecraft:orange_stained_glass"
}
},
"result": {
"item": "militaryarmor:vsu_vest_2"
}
}