mirror of
https://github.com/JonasunderscoreJones/NotEnoughCursedness.git
synced 2025-10-23 12:39:19 +02:00
switched to mojmap (still some bugs)
This commit is contained in:
parent
cc4cf42f31
commit
9d65bf4a3b
8 changed files with 78 additions and 65 deletions
|
@ -17,7 +17,12 @@ repositories {
|
||||||
dependencies {
|
dependencies {
|
||||||
// To change the versions see the gradle.properties file
|
// To change the versions see the gradle.properties file
|
||||||
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||||
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
mappings loom.layered {
|
||||||
|
//it.parchment("org.parchmentmc.data:parchment-1.19.3:2022.12.18@zip")
|
||||||
|
it.officialMojangMappings {
|
||||||
|
setNameSyntheticMembers(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||||
|
|
||||||
// Fabric API. This is technically optional, but you probably want it anyway.
|
// Fabric API. This is technically optional, but you probably want it anyway.
|
||||||
|
|
|
@ -4,9 +4,9 @@ org.gradle.parallel=true
|
||||||
|
|
||||||
# Fabric Properties
|
# Fabric Properties
|
||||||
# check these on https://fabricmc.net/develop
|
# check these on https://fabricmc.net/develop
|
||||||
minecraft_version=1.19.4
|
minecraft_version=1.19.2
|
||||||
yarn_mappings=1.19.4+build.1
|
yarn_mappings=1.19.2+build.28
|
||||||
loader_version=0.14.17
|
loader_version=0.14.19
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 0.1.0
|
mod_version = 0.1.0
|
||||||
|
@ -14,4 +14,4 @@ org.gradle.parallel=true
|
||||||
archives_base_name = not-enough-cursedness
|
archives_base_name = not-enough-cursedness
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
fabric_version=0.75.3+1.19.4
|
fabric_version=0.76.0+1.19.2
|
||||||
|
|
|
@ -3,16 +3,18 @@ package me.jonasjones.nec.block;
|
||||||
import me.jonasjones.nec.util.ModRegistries;
|
import me.jonasjones.nec.util.ModRegistries;
|
||||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.block.Material;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.block.PillarBlock;
|
import net.minecraft.world.item.BlockItem;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.world.level.block.RotatedPillarBlock;
|
||||||
import net.minecraft.registry.Registry;
|
import net.minecraft.world.level.material.Material;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
|
import static net.minecraft.core.Registry.BLOCK;
|
||||||
|
import static net.minecraft.core.Registry.ITEM;
|
||||||
|
|
||||||
public class ModBlocks {
|
public class ModBlocks {
|
||||||
public static final Block GREEN_BIRCH_LOG = new PillarBlock(FabricBlockSettings.of(Material.WOOD).strength(4.0f));
|
public static final Block GREEN_BIRCH_LOG = new RotatedPillarBlock(FabricBlockSettings.of(Material.WOOD).strength(4.0f));
|
||||||
public static final Block BLAZE_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
public static final Block BLAZE_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
||||||
public static final Block GUN_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
public static final Block GUN_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
||||||
public static final Block DIAMOND_ORE_ORE = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
public static final Block DIAMOND_ORE_ORE = new Block(FabricBlockSettings.of(Material.STONE).strength(4.0F));
|
||||||
|
@ -38,32 +40,32 @@ public class ModBlocks {
|
||||||
//public static final Block STRIPPED_GREEN_BIRCH_WOOD = new PillarBlock(FabricBlockSettings.of(Material.WOOD).strength(4.0f));
|
//public static final Block STRIPPED_GREEN_BIRCH_WOOD = new PillarBlock(FabricBlockSettings.of(Material.WOOD).strength(4.0f));
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
BLAZE_BLOCK_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "blaze_block"), BLAZE_BLOCK);
|
BLAZE_BLOCK_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "blaze_block"), BLAZE_BLOCK);
|
||||||
BLAZE_BLOCK_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "blaze_block"), new BlockItem(BLAZE_BLOCK, new FabricItemSettings()));
|
BLAZE_BLOCK_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "blaze_block"), new BlockItem(BLAZE_BLOCK, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(BLAZE_BLOCK_ITEM);
|
ModRegistries.register_item(BLAZE_BLOCK_ITEM);
|
||||||
|
|
||||||
GREEEN_BIRCH_LOG_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "green_birch_log"), GREEN_BIRCH_LOG);
|
GREEEN_BIRCH_LOG_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "green_birch_log"), GREEN_BIRCH_LOG);
|
||||||
GREEN_BIRCH_LOG_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "green_birch_log"), new BlockItem(GREEN_BIRCH_LOG, new FabricItemSettings()));
|
GREEN_BIRCH_LOG_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "green_birch_log"), new BlockItem(GREEN_BIRCH_LOG, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(GREEN_BIRCH_LOG_ITEM);
|
ModRegistries.register_item(GREEN_BIRCH_LOG_ITEM);
|
||||||
|
|
||||||
GUN_BLOCK_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "gun_block"), GUN_BLOCK);
|
GUN_BLOCK_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "gun_block"), GUN_BLOCK);
|
||||||
GUN_BLOCK_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "gun_block"), new BlockItem(GUN_BLOCK, new FabricItemSettings()));
|
GUN_BLOCK_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "gun_block"), new BlockItem(GUN_BLOCK, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(GUN_BLOCK_ITEM);
|
ModRegistries.register_item(GUN_BLOCK_ITEM);
|
||||||
|
|
||||||
DIAMOND_ORE_ORE_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "diamond_ore_ore"), DIAMOND_ORE_ORE);
|
DIAMOND_ORE_ORE_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "diamond_ore_ore"), DIAMOND_ORE_ORE);
|
||||||
DIAMOND_ORE_ORE_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "diamond_ore_ore"), new BlockItem(DIAMOND_ORE_ORE, new FabricItemSettings()));
|
DIAMOND_ORE_ORE_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "diamond_ore_ore"), new BlockItem(DIAMOND_ORE_ORE, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(DIAMOND_ORE_ORE_ITEM);
|
ModRegistries.register_item(DIAMOND_ORE_ORE_ITEM);
|
||||||
|
|
||||||
DEEPSLATE_DIAMOND_ORE_ORE_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "deepslate_diamond_ore_ore"), DEEPSLATE_DIAMOND_ORE_ORE);
|
DEEPSLATE_DIAMOND_ORE_ORE_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "deepslate_diamond_ore_ore"), DEEPSLATE_DIAMOND_ORE_ORE);
|
||||||
DEEPSLATE_DIAMOND_ORE_ORE_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "deepslate_diamond_ore_ore"), new BlockItem(DEEPSLATE_DIAMOND_ORE_ORE, new FabricItemSettings()));
|
DEEPSLATE_DIAMOND_ORE_ORE_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "deepslate_diamond_ore_ore"), new BlockItem(DEEPSLATE_DIAMOND_ORE_ORE, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(DEEPSLATE_DIAMOND_ORE_ORE_ITEM);
|
ModRegistries.register_item(DEEPSLATE_DIAMOND_ORE_ORE_ITEM);
|
||||||
|
|
||||||
JAVA_BLOCK_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "java_block"), JAVA_BLOCK);
|
JAVA_BLOCK_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "java_block"), JAVA_BLOCK);
|
||||||
JAVA_BLOCK_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "java_block"), new BlockItem(JAVA_BLOCK, new FabricItemSettings()));
|
JAVA_BLOCK_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "java_block"), new BlockItem(JAVA_BLOCK, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(JAVA_BLOCK_ITEM);
|
ModRegistries.register_item(JAVA_BLOCK_ITEM);
|
||||||
|
|
||||||
POCKET_BLOCK_BLOCK = Registry.register(Registries.BLOCK, new Identifier("nec", "pocket_block"), POCKET_BLOCK);
|
POCKET_BLOCK_BLOCK = Registry.register(BLOCK, new ResourceLocation("nec", "pocket_block"), POCKET_BLOCK);
|
||||||
POCKET_BLOCK_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "pocket_block"), new BlockItem(POCKET_BLOCK, new FabricItemSettings()));
|
POCKET_BLOCK_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "pocket_block"), new BlockItem(POCKET_BLOCK, new FabricItemSettings()));
|
||||||
ModRegistries.register_item(POCKET_BLOCK_ITEM);
|
ModRegistries.register_item(POCKET_BLOCK_ITEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,42 +3,45 @@ package me.jonasjones.nec.item;
|
||||||
import me.jonasjones.nec.item.materials.DirtToolMaterial;
|
import me.jonasjones.nec.item.materials.DirtToolMaterial;
|
||||||
import me.jonasjones.nec.util.ModRegistries;
|
import me.jonasjones.nec.util.ModRegistries;
|
||||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||||
import net.minecraft.item.*;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.registry.Registry;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.world.item.SwordItem;
|
||||||
|
import net.minecraft.world.item.TieredItem;
|
||||||
|
|
||||||
|
import static net.minecraft.core.Registry.ITEM;
|
||||||
|
|
||||||
public class ModItems {
|
public class ModItems {
|
||||||
private static Item STEEL_ITEM;
|
private static Item STEEL_ITEM;
|
||||||
private static ToolItem DIRT_SWORD_ITEM;
|
private static TieredItem DIRT_SWORD_ITEM;
|
||||||
private static Item NEGATIVE_FLINT_ITEM;
|
private static Item NEGATIVE_FLINT_ITEM;
|
||||||
private static Item LETTER_ITEM;
|
private static Item LETTER_ITEM;
|
||||||
private static Item CHAINMAIL_ITEM;
|
private static Item CHAINMAIL_ITEM;
|
||||||
private static Item AK47_ITEM;
|
private static Item AK47_ITEM;
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
ToolItem DIRT_SWORD = new SwordItem(DirtToolMaterial.INSTANCE, 1, -3.0F, new Item.Settings());
|
TieredItem DIRT_SWORD = new SwordItem(DirtToolMaterial.INSTANCE, 1, -3.0F, new Item.Properties());
|
||||||
DIRT_SWORD_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "dirt_sword"), DIRT_SWORD);
|
DIRT_SWORD_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "dirt_sword"), DIRT_SWORD);
|
||||||
ModRegistries.register_item(DIRT_SWORD_ITEM);
|
ModRegistries.register_item(DIRT_SWORD_ITEM);
|
||||||
|
|
||||||
Item STEEL = new Item(new FabricItemSettings());
|
Item STEEL = new Item(new FabricItemSettings());
|
||||||
STEEL_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "steel"), STEEL);
|
STEEL_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "steel"), STEEL);
|
||||||
ModRegistries.register_item(STEEL_ITEM);
|
ModRegistries.register_item(STEEL_ITEM);
|
||||||
|
|
||||||
Item NEGATIVE_FLINT = new Item(new FabricItemSettings());
|
Item NEGATIVE_FLINT = new Item(new FabricItemSettings());
|
||||||
NEGATIVE_FLINT_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "negative_flint"), NEGATIVE_FLINT);
|
NEGATIVE_FLINT_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "negative_flint"), NEGATIVE_FLINT);
|
||||||
ModRegistries.register_item(NEGATIVE_FLINT_ITEM);
|
ModRegistries.register_item(NEGATIVE_FLINT_ITEM);
|
||||||
|
|
||||||
Item LETTER = new Item(new FabricItemSettings());
|
Item LETTER = new Item(new FabricItemSettings());
|
||||||
LETTER_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "letter"), LETTER);
|
LETTER_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "letter"), LETTER);
|
||||||
ModRegistries.register_item(LETTER_ITEM);
|
ModRegistries.register_item(LETTER_ITEM);
|
||||||
|
|
||||||
Item CHAINMAIL = new Item(new FabricItemSettings());
|
Item CHAINMAIL = new Item(new FabricItemSettings());
|
||||||
CHAINMAIL_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "chainmail"), CHAINMAIL);
|
CHAINMAIL_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "chainmail"), CHAINMAIL);
|
||||||
ModRegistries.register_item(CHAINMAIL_ITEM);
|
ModRegistries.register_item(CHAINMAIL_ITEM);
|
||||||
|
|
||||||
Item AK47 = new Item(new FabricItemSettings());
|
Item AK47 = new Item(new FabricItemSettings());
|
||||||
AK47_ITEM = Registry.register(Registries.ITEM, new Identifier("nec", "ak_47"), AK47);
|
AK47_ITEM = Registry.register(ITEM, new ResourceLocation("nec", "ak_47"), AK47);
|
||||||
ModRegistries.register_item(AK47_ITEM);
|
ModRegistries.register_item(AK47_ITEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +1,41 @@
|
||||||
package me.jonasjones.nec.item.materials;
|
package me.jonasjones.nec.item.materials;
|
||||||
|
|
||||||
import net.minecraft.item.Items;
|
|
||||||
import net.minecraft.item.ToolMaterial;
|
|
||||||
import net.minecraft.recipe.Ingredient;
|
|
||||||
|
|
||||||
public class DirtToolMaterial implements ToolMaterial {
|
import net.minecraft.world.item.Items;
|
||||||
|
import net.minecraft.world.item.Tier;
|
||||||
|
import net.minecraft.world.item.crafting.Ingredient;
|
||||||
|
|
||||||
|
public class DirtToolMaterial implements Tier {
|
||||||
|
|
||||||
public static final DirtToolMaterial INSTANCE = new DirtToolMaterial();
|
public static final DirtToolMaterial INSTANCE = new DirtToolMaterial();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getDurability() {
|
public int getUses() {
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getMiningSpeedMultiplier() {
|
public float getSpeed() {
|
||||||
return 1.0F;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getAttackDamage() {
|
public float getAttackDamageBonus() {
|
||||||
return 2.0F;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMiningLevel() {
|
public int getLevel() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnchantability() {
|
public int getEnchantmentValue() {
|
||||||
return 100;
|
return 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Ingredient getRepairIngredient() {
|
public Ingredient getRepairIngredient() {
|
||||||
return Ingredient.ofItems(Items.DIRT, Items.COARSE_DIRT, Items.DIRT_PATH, Items.ROOTED_DIRT);
|
return Ingredient.of(Items.DIRT, Items.COARSE_DIRT, Items.DIRT_PATH, Items.ROOTED_DIRT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package me.jonasjones.nec.mixin;
|
package me.jonasjones.nec.mixin;
|
||||||
|
|
||||||
import me.jonasjones.nec.NotEnoughCursedness;
|
import me.jonasjones.nec.NotEnoughCursedness;
|
||||||
import net.minecraft.client.gui.screen.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
package me.jonasjones.nec.util;
|
package me.jonasjones.nec.util;
|
||||||
|
|
||||||
import me.jonasjones.nec.block.ModBlocks;
|
import me.jonasjones.nec.block.ModBlocks;
|
||||||
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
|
|
||||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
|
||||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
|
||||||
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
|
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
|
||||||
import net.fabricmc.fabric.api.registry.FuelRegistry;
|
import net.fabricmc.fabric.api.registry.FuelRegistry;
|
||||||
import net.fabricmc.fabric.api.registry.StrippableBlockRegistry;
|
import net.fabricmc.fabric.api.registry.StrippableBlockRegistry;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.client.gui.screens.CreateBuffetWorldScreen;
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
public class ModRegistries {
|
public class ModRegistries {
|
||||||
|
|
||||||
static final ItemGroup ITEM_GROUP = FabricItemGroup.builder(new Identifier("nec", "not_enough_cursedness"))
|
static final CreativeModeTab ITEM_GROUP = new CreativeModeTab(0, "nec") {
|
||||||
.icon(() -> ModBlocks.GREEN_BIRCH_LOG_ITEM.getDefaultStack())
|
@Override
|
||||||
.build();
|
public ItemStack makeIcon() {
|
||||||
|
return ModBlocks.GREEN_BIRCH_LOG_ITEM.getDefaultInstance();
|
||||||
|
}
|
||||||
|
};
|
||||||
public static void registerModStuffs() {
|
public static void registerModStuffs() {
|
||||||
registerFuels();
|
registerFuels();
|
||||||
registerCommands();
|
registerCommands();
|
||||||
|
@ -51,8 +52,8 @@ public class ModRegistries {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register_item(Item CUSTOM_ITEM) {
|
public static void register_item(Item CUSTOM_ITEM) {
|
||||||
ItemGroupEvents.modifyEntriesEvent(ITEM_GROUP).register(content -> {
|
//CreateBuffetWorldScreen.modifyEntriesEvent(ITEM_GROUP).register(content -> {
|
||||||
content.add(CUSTOM_ITEM);
|
// content.add(CUSTOM_ITEM);
|
||||||
});
|
//});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.14.17",
|
"fabricloader": ">=0.14.17",
|
||||||
"fabric-api": "*",
|
"fabric-api": "*",
|
||||||
"minecraft": "~1.19.4",
|
"minecraft": "~1.19.2",
|
||||||
"java": ">=17"
|
"java": ">=17"
|
||||||
},
|
},
|
||||||
"suggests": {
|
"suggests": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue