Skip to content

Commit

Permalink
Merge 1.17 branch (#6)
Browse files Browse the repository at this point in the history
* Bump protocol version to v440

* Add BlockIds

* finish new block traits and block types

* 1.17 block updates

* Update GameRules (#5)

* Implement ItemPalette and move runtimeID logic out of ItemRegistry

* Item fixes

* Item Updates

Co-authored-by: Kazuk <[email protected]>
  • Loading branch information
Sleepybear and Kazzuk authored Jun 16, 2021
1 parent 5fa1890 commit 800703e
Show file tree
Hide file tree
Showing 20 changed files with 445 additions and 26 deletions.
50 changes: 46 additions & 4 deletions src/main/java/org/cloudburstmc/api/block/BlockCategories.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,32 @@ private void initDefaultCategories() {
WOODEN_DOOR,
WOODEN_PRESSURE_PLATE,
WOODEN_SLAB,
WOOL
WOOL,
COPPER_ORE,
DRIPSTONE_BLOCK,
DIRT_WITH_ROOTS,
MOSS_BLOCK,
SPORE_BLOSSOM,
CALCITE,
TUFF,
COPPER,
CUT_COPPER,
SMOOTH_BASALT,
COBBLED_DEEPSLATE,
POLISHED_DEEPSLATE,
DEEPSLATE_TILES,
DEEPSLATE_BRICKS,
CRACKED_DEEPSLATE_BRICKS,
CRACKED_DEEPSLATE_TILES,
CHISELED_DEEPSLATE,
DEEPSLATE_LAPIS_ORE,
DEEPSLATE_IRON_ORE,
DEEPSLATE_GOLD_ORE,
DEEPSLATE_REDSTONE_ORE,
DEEPSLATE_DIAMOND_ORE,
DEEPSLATE_EMERALD_ORE,
DEEPSLATE_COAL_ORE,
DEEPSLATE_COPPER_ORE
);

categorize(BlockCategory.TRANSPARENT,
Expand Down Expand Up @@ -318,16 +343,33 @@ private void initDefaultCategories() {
TRIPWIRE,
TRIPWIRE_HOOK,
END_PORTAL_FRAME,
INVISIBLE_BEDROCK
INVISIBLE_BEDROCK,
POWDER_SNOW,
SCULK_SENSOR,
POINTED_DRIPSTONE,
LIGHTNING_ROD,
HANGING_ROOTS,
CAVE_VINES,
BIG_DRIPLEAF,
AMETHYST_CLUSTER,
MOSS_CARPET,
SMALL_DRIPLEAF,
AZALEA,
COPPER_STAIRS,
COPPER_SLAB,
GLOW_LICHEN

);

categorize(BlockCategory.STAIRS,
WOODEN_STAIRS,
STONE_STAIRS
STONE_STAIRS,
COPPER_STAIRS
);
categorize(BlockCategory.SLAB,
STONE_SLAB,
WOODEN_SLAB
WOODEN_SLAB,
COPPER_SLAB
);

categorize(BlockCategory.DOOR,
Expand Down
109 changes: 109 additions & 0 deletions src/main/java/org/cloudburstmc/api/block/BlockIds.java

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion src/main/java/org/cloudburstmc/api/block/BlockTraits.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,18 @@ public class BlockTraits {
public static final EnumBlockTrait<BambooStalkThickness> BAMBOO_STALK_THICKNESS = EnumBlockTrait.of("bamboo_stalk_thickness", BambooStalkThickness.class);
public static final IntegerBlockTrait BITE_COUNTER = IntegerBlockTrait.from("bite_counter", 7);
public static final EnumBlockTrait<Bucket> CAULDRON_TYPE = EnumBlockTrait.of("cauldron_type", Bucket.class, Bucket.WATER, Bucket.LAVA);
public static final IntegerBlockTrait CAVE_VINE_AGE = IntegerBlockTrait.from("growing_plant_age", 26);
public static final EnumBlockTrait<CaveVineType> CAVE_VINE_TYPE = EnumBlockTrait.of("cave_vine_type", CaveVineType.class);
public static final IntegerBlockTrait CHORUS_AGE = IntegerBlockTrait.from("chorus_age", "age", 0, 5, 0);
public static final IntegerBlockTrait COCOA_AGE = IntegerBlockTrait.from("cocoa_age", "age", 0, 2, 0);
public static final IntegerBlockTrait CORAL_FAN_DIRECTION = IntegerBlockTrait.from("coral_fan_direction", 2);
public static final EnumBlockTrait<ChemistryTableType> CHEMISTRY_TABLE_TYPE = EnumBlockTrait.of("chemistry_table_type", ChemistryTableType.class);
public static final EnumBlockTrait<ChiselType> CHISEL_TYPE = EnumBlockTrait.of("chisel_type", ChiselType.class);
public static final IntegerBlockTrait CLUSTER_COUNT = IntegerBlockTrait.from("cluster_count", 4);
public static final EnumBlockTrait<ClusterSize> CLUSTER_SIZE = EnumBlockTrait.of("cluster_size", ClusterSize.class, ClusterSize.SMALL);
public static final EnumBlockTrait<DyeColor> COLOR = EnumBlockTrait.of("color", DyeColor.class);
public static final IntegerBlockTrait COMPOSTER_FILL_LEVEL = IntegerBlockTrait.from("composter_fill_level", 9);
public static final EnumBlockTrait<CopperType> COPPER_TYPE = EnumBlockTrait.of("copper_type", CopperType.class, CopperType.RAW);
public static final EnumBlockTrait<DyeColor> CORAL_COLOR = EnumBlockTrait.of("coral_color", DyeColor.class,
DyeColor.BLUE, DyeColor.PINK, DyeColor.PURPLE, DyeColor.RED, DyeColor.YELLOW);
public static final EnumBlockTrait<DyeColor> CORAL_HANG_COLOR = EnumBlockTrait.of("coral_color", "coral_hang_type_bit", DyeColor.class,
Expand All @@ -38,6 +42,9 @@ public class BlockTraits {
public static final EnumBlockTrait<AnvilDamage> DAMAGE = EnumBlockTrait.of("damage", AnvilDamage.class, AnvilDamage.UNDAMAGED);
public static final EnumBlockTrait<DirtType> DIRT_TYPE = EnumBlockTrait.of("dirt_type", DirtType.class);
public static final EnumBlockTrait<DoublePlantType> DOUBLE_PLANT_TYPE = EnumBlockTrait.of("double_plant_type", DoublePlantType.class);
public static final BooleanBlockTrait DRIPLEAF_HEAD = BooleanBlockTrait.of("dripleaf_head", "big_dripleaf_head");
public static final EnumBlockTrait<DripleafTilt> DRIPLEAF_TILT = EnumBlockTrait.of("dripleaf_tilt", "big_dripleaf_tilt", DripleafTilt.class);
public static final EnumBlockTrait<DripstoneThickness> DRIPSTONE_THICKNESS = EnumBlockTrait.of("dripstone_thickness", DripstoneThickness.class);
public static final BooleanBlockTrait HAS_DRAG_DOWN = BooleanBlockTrait.of("drag_down");
public static final EnumBlockTrait<ElementType> ELEMENT_TYPE = EnumBlockTrait.of("element_type", ElementType.class);
public static final BooleanBlockTrait EXPLODE = BooleanBlockTrait.of("explode", "explode_bit");
Expand Down Expand Up @@ -87,7 +94,7 @@ public class BlockTraits {
public static final EnumBlockTrait<WallConnectionType> WALL_CONNECTION_SOUTH = EnumBlockTrait.of("wall_connection_south", "wall_connection_type_south", WallConnectionType.class);
public static final EnumBlockTrait<WallConnectionType> WALL_CONNECTION_WEST = EnumBlockTrait.of("wall_connection_west", "wall_connection_type_west", WallConnectionType.class);
public static final IntegerBlockTrait WEEPING_VINES_AGE = IntegerBlockTrait.from("weeping_vines_age", 26);

public static final IntegerBlockTrait MULTI_FACE_DIRECTION = IntegerBlockTrait.from("multi_face_direction", "multi_face_direction_bits", 0, 63, 0);
public static final EnumBlockTrait<Direction.Axis> AXIS = EnumBlockTrait.of("axis", "pillar_axis", Direction.Axis.class, ImmutableSet.copyOf(Direction.Axis.values()), Direction.Axis.Y);
public static final EnumBlockTrait<Direction.Axis> PORTAL_AXIS = EnumBlockTrait.of("portal_axis", Direction.Axis.class,
Direction.Axis.Y, //TODO: this was null
Expand All @@ -111,10 +118,13 @@ public class BlockTraits {
public static final BooleanBlockTrait IS_DISARMED = BooleanBlockTrait.of("is_disarmed", "disarmed_bit");
public static final BooleanBlockTrait IS_DOOR_HINGE = BooleanBlockTrait.of("is_door_hinge", "door_hinge_bit", true);
public static final BooleanBlockTrait IS_EXTINGUISHED = BooleanBlockTrait.of("is_extinguished", "extinguished");
public static final BooleanBlockTrait IS_FLOWERED = BooleanBlockTrait.of("is_flowered");
public static final BooleanBlockTrait IS_FLOWING = BooleanBlockTrait.of("is_flowing");
public static final BooleanBlockTrait IS_GLOWING = BooleanBlockTrait.of("is_glowing");
public static final BooleanBlockTrait IS_HANGING = BooleanBlockTrait.of("is_hanging", "hanging");
public static final BooleanBlockTrait IS_HEAD_PIECE = BooleanBlockTrait.of("is_head_piece", "head_piece_bit");
public static final BooleanBlockTrait IS_IN_WALL = BooleanBlockTrait.of("is_in_wall", "in_wall_bit");
public static final BooleanBlockTrait IS_INFESTED = BooleanBlockTrait.of("is_infested");
public static final BooleanBlockTrait IS_OCCUPIED = BooleanBlockTrait.of("is_occupied", "occupied_bit");
public static final BooleanBlockTrait IS_OPEN = BooleanBlockTrait.of("is_open", "open_bit");
public static final BooleanBlockTrait IS_OUTPUT_LIT = BooleanBlockTrait.of("is_output_lit", "output_lit_bit");
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/org/cloudburstmc/api/block/BlockType.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,12 @@ public boolean isBlock() {

@Override
public boolean isPlaceable() {
return false;
return true;
}

//TODO - move a lot of this to block/item behavior classes?
public boolean blocksMotion() {
return true;
return this != BlockTypes.AIR;
}

public boolean blocksWater() {
Expand Down Expand Up @@ -199,7 +200,7 @@ public float getResistance() {
@Nullable
@Override
public BlockType getBlock() {
return null;
return this;
}

@Nullable
Expand Down
51 changes: 50 additions & 1 deletion src/main/java/org/cloudburstmc/api/block/BlockTypes.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public class BlockTypes {
public static final BlockType HARD_STAINED_GLASS_PANE = BlockType.of(Identifiers.HARD_STAINED_GLASS_PANE, BlockTraits.COLOR);
public static final BlockType CHEMICAL_HEAT = BlockType.of(Identifiers.CHEMICAL_HEAT);
public static final BlockType GRASS_PATH = BlockType.of(Identifiers.GRASS_PATH);
public static final BlockType FRAME = BlockType.of(Identifiers.FRAME, BlockTraits.FACING_DIRECTION, BlockTraits.HAS_MAP);
public static final BlockType FRAME = BlockType.of(Identifiers.FRAME, BlockTraits.IS_GLOWING, BlockTraits.FACING_DIRECTION, BlockTraits.HAS_MAP);
public static final BlockType CHORUS_FLOWER = BlockType.of(Identifiers.CHORUS_FLOWER, BlockTraits.CHORUS_AGE);
public static final BlockType PURPUR_BLOCK = BlockType.of(Identifiers.PURPUR_BLOCK, BlockTraits.CHISEL_TYPE, BlockTraits.AXIS);
public static final BlockType COLORED_TORCH_RG = BlockType.of(Identifiers.COLORED_TORCH_RG, BlockTraits.HAS_COLOR, BlockTraits.TORCH_DIRECTION);
Expand Down Expand Up @@ -278,6 +278,55 @@ public class BlockTypes {
public static final BlockType CRYING_OBSIDIAN = BlockType.of(Identifiers.CRYING_OBSIDIAN);
public static final BlockType POLISHED_BLACKSTONE = BlockType.of(Identifiers.POLISHED_BLACKSTONE);
public static final BlockType QUARTZ_BRICKS = BlockType.of(Identifiers.QUARTZ_BRICKS);
/* 1.17 Blocks */
public static final BlockType POWDER_SNOW = BlockType.of(BlockIds.POWDER_SNOW);
public static final BlockType SCULK_SENSOR = BlockType.of(BlockIds.SCULK_SENSOR, BlockTraits.IS_POWERED);
public static final BlockType POINTED_DRIPSTONE = BlockType.of(BlockIds.POINTED_DRIPSTONE, BlockTraits.DRIPSTONE_THICKNESS, BlockTraits.IS_HANGING);
public static final BlockType COPPER_ORE = BlockType.of(BlockIds.COPPER_ORE);
public static final BlockType LIGHTNING_ROD = BlockType.of(BlockIds.LIGHTNING_ROD, BlockTraits.FACING_DIRECTION);
public static final BlockType DRIPSTONE_BLOCK = BlockType.of(BlockIds.DRIPSTONE_BLOCK);
public static final BlockType DIRT_WITH_ROOTS = BlockType.of(BlockIds.DIRT_WITH_ROOTS);
public static final BlockType HANGING_ROOTS = BlockType.of(BlockIds.HANGING_ROOTS);
public static final BlockType MOSS_BLOCK = BlockType.of(BlockIds.MOSS_BLOCK);
public static final BlockType SPORE_BLOSSOM = BlockType.of(BlockIds.SPORE_BLOSSOM);
public static final BlockType BIG_DRIPLEAF = BlockType.of(BlockIds.BIG_DRIPLEAF, BlockTraits.DRIPLEAF_HEAD, BlockTraits.DRIPLEAF_TILT, BlockTraits.DIRECTION);
public static final BlockType AZALEA_LEAVES = BlockType.of(BlockIds.AZALEA_LEAVES, BlockTraits.IS_FLOWERED, BlockTraits.IS_PERSISTENT, BlockTraits.HAS_UPDATE);
public static final BlockType CALCITE = BlockType.of(BlockIds.CALCITE);
public static final BlockType AMETHYST_BLOCK = BlockType.of(BlockIds.AMETHYST_BLOCK);
public static final BlockType BUDDING_AMETHYST = BlockType.of(BlockIds.BUDDING_AMETHYST);
public static final BlockType AMETHYST_CLUSTER = BlockType.of(BlockIds.AMETHYST_CLUSTER, BlockTraits.CLUSTER_SIZE, BlockTraits.FACING_DIRECTION);
public static final BlockType TUFF = BlockType.of(BlockIds.TUFF);
public static final BlockType TINTED_GLASS = BlockType.of(BlockIds.TINTED_GLASS);
public static final BlockType MOSS_CARPET = BlockType.of(BlockIds.MOSS_CARPET);
public static final BlockType SMALL_DRIPLEAF = BlockType.of(BlockIds.SMALL_DRIPLEAF_BLOCK, BlockTraits.DIRECTION, BlockTraits.IS_UPPER_BLOCK);
public static final BlockType AZALEA = BlockType.of(BlockIds.AZALEA, BlockTraits.IS_FLOWERED);
public static final BlockType COPPER = BlockType.of(BlockIds.COPPER_BLOCK, BlockTraits.COPPER_TYPE);
public static final BlockType CUT_COPPER = BlockType.of(BlockIds.CUT_COPPER, BlockTraits.COPPER_TYPE);
public static final BlockType COPPER_STAIRS = BlockType.of(BlockIds.CUT_COPPER_STAIRS, BlockTraits.COPPER_TYPE, BlockTraits.IS_UPSIDE_DOWN, BlockTraits.DIRECTION);
public static final BlockType COPPER_SLAB = BlockType.of(BlockIds.CUT_COPPER_SLAB, BlockTraits.COPPER_TYPE, BlockTraits.SLAB_SLOT);
public static final BlockType CAVE_VINES = BlockType.of(BlockIds.CAVE_VINES, BlockTraits.CAVE_VINE_TYPE, BlockTraits.CAVE_VINE_AGE);
public static final BlockType SMOOTH_BASALT = BlockType.of(BlockIds.SMOOTH_BASALT);
public static final BlockType DEEPSLATE = BlockType.of(BlockIds.DEEPSLATE, BlockTraits.IS_INFESTED, BlockTraits.AXIS);
public static final BlockType COBBLED_DEEPSLATE = BlockType.of(BlockIds.COBBLED_DEEPSLATE);
public static final BlockType POLISHED_DEEPSLATE = BlockType.of(BlockIds.POLISHED_DEEPSLATE);
public static final BlockType DEEPSLATE_TILES = BlockType.of(BlockIds.DEEPSLATE_TILES);
public static final BlockType DEEPSLATE_BRICKS = BlockType.of(BlockIds.DEEPSLATE_BRICKS);
public static final BlockType CHISELED_DEEPSLATE = BlockType.of(BlockIds.CHISELED_DEEPSLATE);
public static final BlockType DEEPSLATE_LAPIS_ORE = BlockType.of(BlockIds.DEEPSLATE_LAPIS_ORE);
public static final BlockType DEEPSLATE_IRON_ORE = BlockType.of(BlockIds.DEEPSLATE_IRON_ORE);
public static final BlockType DEEPSLATE_GOLD_ORE = BlockType.of(BlockIds.DEEPSLATE_GOLD_ORE);
public static final BlockType DEEPSLATE_REDSTONE_ORE = BlockType.of(BlockIds.DEEPSLATE_REDSTONE_ORE, BlockTraits.IS_EXTINGUISHED);
public static final BlockType DEEPSLATE_DIAMOND_ORE = BlockType.of(BlockIds.DEEPSLATE_DIAMOND_ORE);
public static final BlockType DEEPSLATE_COAL_ORE = BlockType.of(BlockIds.DEEPSLATE_COAL_ORE);
public static final BlockType DEEPSLATE_EMERALD_ORE = BlockType.of(BlockIds.DEEPSLATE_EMERALD_ORE);
public static final BlockType DEEPSLATE_COPPER_ORE = BlockType.of(BlockIds.DEEPSLATE_COPPER_ORE);
public static final BlockType CRACKED_DEEPSLATE_TILES = BlockType.of(BlockIds.CRACKED_DEEPSLATE_TILES);
public static final BlockType CRACKED_DEEPSLATE_BRICKS = BlockType.of(BlockIds.CRACKED_DEEPSLATE_BRICKS);
public static final BlockType GLOW_LICHEN = BlockType.of(BlockIds.GLOW_LICHEN, BlockTraits.MULTI_FACE_DIRECTION);

public static final BlockType RAW_COPPER_BLOCK = BlockType.of(BlockIds.RAW_COPPER_BLOCK);
public static final BlockType RAW_IRON_BLOCK = BlockType.of(BlockIds.RAW_IRON_BLOCK);
public static final BlockType RAW_GOLD_BLOCK = BlockType.of(BlockIds.RAW_GOLD_BLOCK);

public static final BlockType UNKNOWN = BlockType.of(Identifiers.UNKNOWN);
}
29 changes: 29 additions & 0 deletions src/main/java/org/cloudburstmc/api/crafting/CraftingRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.cloudburstmc.api.crafting;

import org.cloudburstmc.api.item.ItemStack;

import java.util.List;

/**
* @author CreeperFace
*/
public interface CraftingRecipe extends Recipe {

boolean requiresCraftingTable();

List<? extends ItemStack> getExtraResults();

List<? extends ItemStack> getAllResults();

int getPriority();

/**
* Returns whether the specified list of crafting grid inputs and outputs matches this recipe. Outputs DO NOT
* include the primary result item.
*
* @param input 2D array of items taken from the crafting grid
* @param output 2D array of items put back into the crafting grid (secondary results)
* @return bool
*/
boolean matchItems(ItemStack[][] input, ItemStack[][] output);
}
48 changes: 48 additions & 0 deletions src/main/java/org/cloudburstmc/api/crafting/MixRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.cloudburstmc.api.crafting;

import lombok.ToString;
import org.cloudburstmc.api.item.ItemStack;
import org.cloudburstmc.api.util.Identifier;

@ToString
public abstract class MixRecipe implements Recipe {

private final ItemStack input;
private final ItemStack ingredient;
private final ItemStack output;
private final Identifier recipeId;

public MixRecipe(Identifier id, ItemStack input, ItemStack ingredient, ItemStack output) {
this.recipeId = id;
this.input = input;
this.ingredient = ingredient;
this.output = output;
}

@Override
public Identifier getId() {
return this.recipeId;
}

public ItemStack getIngredient() {
return ingredient;
}

public ItemStack getInput() {
return input;
}

public ItemStack getResult() {
return output;
}

@Override
public RecipeType getType() {
throw new UnsupportedOperationException();
}

@Override
public Identifier getBlock() {
throw new UnsupportedOperationException();
}
}
20 changes: 18 additions & 2 deletions src/main/java/org/cloudburstmc/api/item/ItemIds.java
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ public final class ItemIds {
public static final Identifier RABBIT_HIDE = Identifier.fromString("rabbit_hide");
public static final Identifier HORSE_ARMOR_LEATHER = Identifier.fromString("leather_horse_armor");
public static final Identifier HORSE_ARMOR_IRON = Identifier.fromString("iron_horse_armor");
public static final Identifier HORSE_ARMOR_GOLD = Identifier.fromString("gold_horse_armor");
public static final Identifier HORSE_ARMOR_GOLD = Identifier.fromString("golden_horse_armor");
public static final Identifier HORSE_ARMOR_DIAMOND = Identifier.fromString("diamond_horse_armor");
public static final Identifier LEAD = Identifier.fromString("lead");
public static final Identifier NAME_TAG = Identifier.fromString("name_tag");
Expand Down Expand Up @@ -332,7 +332,7 @@ public final class ItemIds {
public static final Identifier BIRCH_SIGN = Identifier.fromString("birch_sign");
public static final Identifier JUNGLE_SIGN = Identifier.fromString("jungle_sign");
public static final Identifier ACACIA_SIGN = Identifier.fromString("acacia_sign");
public static final Identifier DARK_OAK_SIGN = Identifier.fromString("darkoak_sign");
public static final Identifier DARK_OAK_SIGN = Identifier.fromString("dark_oak_sign");
public static final Identifier SWEET_BERRIES = Identifier.fromString("sweet_berries");
public static final Identifier CAMERA = Identifier.fromString("camera");
public static final Identifier COMPOUND = Identifier.fromString("compound");
Expand Down Expand Up @@ -378,4 +378,20 @@ public final class ItemIds {
public static final Identifier PORTFOLIO = Identifier.fromString("portfolio");

public static final Identifier CONCRETE_POWDER = Identifier.fromString("concrete_powder");

public static final Identifier AMETHYST_SHARD = Identifier.fromString("minecraft:amethyst_shard");
public static final Identifier AXOLOTL_BUCKET = Identifier.fromString("minecraft:axolotl_bucket");
public static final Identifier AXOLOTL_SPAWN_EGG = Identifier.fromString("minecraft:axolotl_spawn_egg");
public static final Identifier GLOW_BERRIES = Identifier.fromString("minecraft:glow_berries");
public static final Identifier GLOW_INK_SAC = Identifier.fromString("minecraft:glow_ink_sac");
public static final Identifier GLOW_SQUID_SPAWN_EGG = Identifier.fromString("minecraft:glow_squid_spawn_egg");
public static final Identifier GOAT_HORN = Identifier.fromString("minecraft:goat_horn");
public static final Identifier GOAT_SPAWN_EGG = Identifier.fromString("minecraft:goat_spawn_egg");
public static final Identifier GLOW_FRAME = Identifier.fromString("minecraft:item.glow_frame");
public static final Identifier POWDER_SNOW_BUCKET = Identifier.fromString("minecraft:powder_snow_bucket");
public static final Identifier RAW_COPPER = Identifier.fromString("minecraft:raw_copper");
public static final Identifier RAW_GOLD = Identifier.fromString("minecraft:raw_gold");
public static final Identifier RAW_IRON = Identifier.fromString("minecraft:raw_iron");
public static final Identifier COPPER_INGOT = Identifier.fromString("minecraft:copper_ingot");
public static final Identifier SPYGLASS = Identifier.fromString("minecraft:spyglass");
}
Loading

0 comments on commit 800703e

Please sign in to comment.