Skip to content

Commit e2a7b40

Browse files
authored
Separate furnace recipes by furnace type, dynamically determine isAFuel for furnaces (#1344)
Co-authored-by: ANRAR4 <->
1 parent e394600 commit e2a7b40

File tree

2 files changed

+81
-110
lines changed

2 files changed

+81
-110
lines changed

src/main/java/com/sk89q/craftbook/util/ItemUtil.java

Lines changed: 67 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -514,35 +514,6 @@ public static ItemStack getSmeltedResult(ItemStack item) {
514514
return new ItemStack(Material.SMOOTH_BASALT);
515515
case CACTUS:
516516
return new ItemStack(Material.GREEN_DYE);
517-
case IRON_ORE:
518-
case RAW_IRON:
519-
case DEEPSLATE_IRON_ORE:
520-
return new ItemStack(Material.IRON_INGOT);
521-
case COAL_ORE:
522-
return new ItemStack(Material.COAL);
523-
case LAPIS_ORE:
524-
case DEEPSLATE_LAPIS_ORE:
525-
return new ItemStack(Material.LAPIS_LAZULI);
526-
case REDSTONE_ORE:
527-
case DEEPSLATE_REDSTONE_ORE:
528-
return new ItemStack(Material.REDSTONE, 4);
529-
case EMERALD_ORE:
530-
case DEEPSLATE_EMERALD_ORE:
531-
return new ItemStack(Material.EMERALD);
532-
case GOLD_ORE:
533-
case NETHER_GOLD_ORE:
534-
case RAW_GOLD:
535-
case DEEPSLATE_GOLD_ORE:
536-
return new ItemStack(Material.GOLD_INGOT);
537-
case ANCIENT_DEBRIS:
538-
return new ItemStack(Material.NETHERITE_SCRAP);
539-
case COPPER_ORE:
540-
case RAW_COPPER:
541-
case DEEPSLATE_COPPER_ORE:
542-
return new ItemStack(Material.COPPER_INGOT);
543-
case DIAMOND_ORE:
544-
case DEEPSLATE_DIAMOND_ORE:
545-
return new ItemStack(Material.DIAMOND);
546517
case SAND:
547518
case RED_SAND:
548519
return new ItemStack(Material.GLASS);
@@ -552,8 +523,6 @@ public static ItemStack getSmeltedResult(ItemStack item) {
552523
return new ItemStack(Material.NETHER_BRICK);
553524
case CLAY:
554525
return new ItemStack(Material.TERRACOTTA);
555-
case NETHER_QUARTZ_ORE:
556-
return new ItemStack(Material.QUARTZ);
557526
case STONE_BRICKS:
558527
return new ItemStack(Material.CRACKED_STONE_BRICKS);
559528
case NETHER_BRICKS:
@@ -592,6 +561,71 @@ public static ItemStack getSmeltedResult(ItemStack item) {
592561
return new ItemStack(Material.RED_GLAZED_TERRACOTTA);
593562
case BLACK_TERRACOTTA:
594563
return new ItemStack(Material.BLACK_GLAZED_TERRACOTTA);
564+
case STONE:
565+
return new ItemStack(Material.SMOOTH_STONE);
566+
case QUARTZ_BLOCK:
567+
return new ItemStack(Material.SMOOTH_QUARTZ);
568+
case SANDSTONE:
569+
return new ItemStack(Material.SMOOTH_SANDSTONE);
570+
case RED_SANDSTONE:
571+
return new ItemStack(Material.SMOOTH_RED_SANDSTONE);
572+
case CHORUS_FRUIT:
573+
return new ItemStack(Material.POPPED_CHORUS_FRUIT);
574+
case SEA_PICKLE:
575+
return new ItemStack(Material.LIME_DYE);
576+
case RESIN_CLUMP:
577+
return new ItemStack(Material.RESIN_BRICK);
578+
default:
579+
if (Tag.LOGS_THAT_BURN.isTagged(item.getType())) {
580+
return new ItemStack(Material.CHARCOAL);
581+
}
582+
if (Tag.LEAVES.isTagged(item.getType())) {
583+
return new ItemStack(Material.LEAF_LITTER);
584+
}
585+
return null;
586+
}
587+
}
588+
589+
public static boolean isBlastSmeltable(ItemStack item) {
590+
591+
return getBlastSmeltedResult(item) != null;
592+
}
593+
594+
public static ItemStack getBlastSmeltedResult(ItemStack item) {
595+
596+
switch (item.getType()) {
597+
case IRON_ORE:
598+
case DEEPSLATE_IRON_ORE:
599+
case RAW_IRON:
600+
return new ItemStack(Material.IRON_INGOT);
601+
case COAL_ORE:
602+
case DEEPSLATE_COAL_ORE:
603+
return new ItemStack(Material.COAL);
604+
case LAPIS_ORE:
605+
case DEEPSLATE_LAPIS_ORE:
606+
return new ItemStack(Material.LAPIS_LAZULI);
607+
case REDSTONE_ORE:
608+
case DEEPSLATE_REDSTONE_ORE:
609+
return new ItemStack(Material.REDSTONE, 4);
610+
case EMERALD_ORE:
611+
case DEEPSLATE_EMERALD_ORE:
612+
return new ItemStack(Material.EMERALD);
613+
case GOLD_ORE:
614+
case DEEPSLATE_GOLD_ORE:
615+
case RAW_GOLD:
616+
case NETHER_GOLD_ORE:
617+
return new ItemStack(Material.GOLD_INGOT);
618+
case ANCIENT_DEBRIS:
619+
return new ItemStack(Material.NETHERITE_SCRAP);
620+
case COPPER_ORE:
621+
case DEEPSLATE_COPPER_ORE:
622+
case RAW_COPPER:
623+
return new ItemStack(Material.COPPER_INGOT);
624+
case DIAMOND_ORE:
625+
case DEEPSLATE_DIAMOND_ORE:
626+
return new ItemStack(Material.DIAMOND);
627+
case NETHER_QUARTZ_ORE:
628+
return new ItemStack(Material.QUARTZ);
595629
case IRON_SWORD:
596630
case IRON_PICKAXE:
597631
case IRON_AXE:
@@ -618,22 +652,7 @@ public static ItemStack getSmeltedResult(ItemStack item) {
618652
case GOLDEN_BOOTS:
619653
case GOLDEN_HORSE_ARMOR:
620654
return new ItemStack(Material.GOLD_NUGGET);
621-
case STONE:
622-
return new ItemStack(Material.SMOOTH_STONE);
623-
case QUARTZ_BLOCK:
624-
return new ItemStack(Material.SMOOTH_QUARTZ);
625-
case SANDSTONE:
626-
return new ItemStack(Material.SMOOTH_SANDSTONE);
627-
case RED_SANDSTONE:
628-
return new ItemStack(Material.SMOOTH_RED_SANDSTONE);
629-
case CHORUS_FRUIT:
630-
return new ItemStack(Material.POPPED_CHORUS_FRUIT);
631-
case SEA_PICKLE:
632-
return new ItemStack(Material.LIME_DYE);
633655
default:
634-
if (Tag.LOGS.isTagged(item.getType())) {
635-
return new ItemStack(Material.CHARCOAL);
636-
}
637656
return null;
638657
}
639658
}
@@ -700,69 +719,7 @@ public static Material getBoatFromTree(TreeSpecies treeSpecies) {
700719
*/
701720
public static boolean isAFuel(ItemStack item) {
702721

703-
switch(item.getType()) {
704-
case COAL:
705-
case CHARCOAL:
706-
case COAL_BLOCK:
707-
case WOODEN_AXE:
708-
case WOODEN_HOE:
709-
case WOODEN_PICKAXE:
710-
case WOODEN_SHOVEL:
711-
case WOODEN_SWORD:
712-
case STICK:
713-
case OAK_FENCE:
714-
case OAK_FENCE_GATE:
715-
case OAK_TRAPDOOR:
716-
case ACACIA_TRAPDOOR:
717-
case BIRCH_TRAPDOOR:
718-
case DARK_OAK_TRAPDOOR:
719-
case JUNGLE_TRAPDOOR:
720-
case SPRUCE_TRAPDOOR:
721-
case CRAFTING_TABLE:
722-
case CHEST:
723-
case TRAPPED_CHEST:
724-
case JUKEBOX:
725-
case NOTE_BLOCK:
726-
case BROWN_MUSHROOM_BLOCK:
727-
case RED_MUSHROOM_BLOCK:
728-
case BLAZE_ROD:
729-
case LAVA_BUCKET:
730-
case BOOKSHELF:
731-
case ACACIA_STAIRS:
732-
case DARK_OAK_STAIRS:
733-
case SPRUCE_FENCE:
734-
case JUNGLE_FENCE:
735-
case BIRCH_FENCE:
736-
case ACACIA_FENCE:
737-
case DARK_OAK_FENCE:
738-
case SPRUCE_FENCE_GATE:
739-
case JUNGLE_FENCE_GATE:
740-
case BIRCH_FENCE_GATE:
741-
case ACACIA_FENCE_GATE:
742-
case DARK_OAK_FENCE_GATE:
743-
case FISHING_ROD:
744-
case BOW:
745-
case LADDER:
746-
case SCAFFOLDING:
747-
case DRIED_KELP_BLOCK:
748-
case BAMBOO:
749-
return true;
750-
default:
751-
return Tag.ITEMS_BOATS.isTagged(item.getType())
752-
|| Tag.WOODEN_DOORS.isTagged(item.getType())
753-
|| Tag.WOOL_CARPETS.isTagged(item.getType())
754-
|| Tag.WOODEN_BUTTONS.isTagged(item.getType())
755-
|| Tag.ITEMS_BANNERS.isTagged(item.getType())
756-
|| Tag.LOGS.isTagged(item.getType())
757-
|| Tag.LEAVES.isTagged(item.getType())
758-
|| Tag.PLANKS.isTagged(item.getType())
759-
|| Tag.WOODEN_STAIRS.isTagged(item.getType())
760-
|| Tag.WOODEN_SLABS.isTagged(item.getType())
761-
|| Tag.SAPLINGS.isTagged(item.getType())
762-
|| Tag.WOOL.isTagged(item.getType())
763-
|| Tag.WOODEN_PRESSURE_PLATES.isTagged(item.getType())
764-
|| Tag.SIGNS.isTagged(item.getType());
765-
}
722+
return item.getType().isFuel();
766723
}
767724

768725
/**
@@ -875,7 +832,7 @@ public static List<ItemStack> getRawMaterials(Inventory inv) {
875832

876833
public static boolean isFurnacable(ItemStack item) {
877834

878-
return isCookable(item) || isSmeltable(item);
835+
return isSmeltable(item) || isCookable(item) || isBlastSmeltable(item);
879836
}
880837

881838
public static boolean isItemEdible(ItemStack item) {

src/test/java/com/sk89q/craftbook/util/ItemUtilTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.junit.Assert.assertNull;
55
import static org.junit.Assert.assertSame;
66
import static org.junit.Assert.assertTrue;
7+
import static org.junit.Assert.assertFalse;
78
import static org.mockito.Mockito.mock;
89
import static org.mockito.Mockito.times;
910
import static org.mockito.Mockito.verify;
@@ -119,13 +120,26 @@ public void testIsCookable() {
119120

120121
ItemStack ingredient = newMockItemStack(Material.CHICKEN, (byte) 0, 1);
121122
assertTrue(ItemUtil.isCookable(ingredient));
123+
ItemStack ingredient2 = newMockItemStack(Material.CLAY, (byte) 0, 1);
124+
assertFalse(ItemUtil.isCookable(ingredient2));
122125
}
123126

124127
@Test
125128
public void testIsSmeltable() {
126129

127130
ItemStack ingredient = newMockItemStack(Material.CLAY, (byte) 0, 1);
128131
assertTrue(ItemUtil.isSmeltable(ingredient));
132+
ItemStack ingredient2 = newMockItemStack(Material.BEDROCK, (byte) 0, 1);
133+
assertFalse(ItemUtil.isCookable(ingredient2));
134+
}
135+
136+
@Test
137+
public void testIsBlastSmeltable() {
138+
139+
ItemStack ingredient = newMockItemStack(Material.IRON_ORE, (byte) 0, 1);
140+
assertTrue(ItemUtil.isBlastSmeltable(ingredient));
141+
ItemStack ingredient2 = newMockItemStack(Material.CHICKEN, (byte) 0, 1);
142+
assertFalse(ItemUtil.isCookable(ingredient2));
129143
}
130144

131145
@Test

0 commit comments

Comments
 (0)