Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 146 lines 5.1 kB view raw
1package net.lerariemann.infinity.item.function; 2 3import net.lerariemann.infinity.item.F4Item; 4import net.lerariemann.infinity.registry.core.ModComponentTypes; 5import net.lerariemann.infinity.registry.core.ModItemFunctions; 6import net.lerariemann.infinity.registry.core.ModItems; 7import net.lerariemann.infinity.util.VersionMethods; 8 9import net.minecraft.core.NonNullList; 10import net.minecraft.core.RegistryAccess; 11//? if >1.21 { 12import net.minecraft.core.component.DataComponentMap; 13import net.minecraft.world.item.crafting.CraftingInput; 14import net.minecraft.core.HolderLookup; 15//?} 16import net.minecraft.resources.ResourceLocation; 17import net.minecraft.world.inventory.CraftingContainer; 18import net.minecraft.world.item.ItemStack; 19import net.minecraft.world.item.Items; 20import net.minecraft.world.item.crafting.CraftingBookCategory; 21import net.minecraft.world.item.crafting.CustomRecipe; 22import net.minecraft.world.item.crafting.RecipeSerializer; 23import net.minecraft.world.level.Level; 24import org.jetbrains.annotations.NotNull; 25 26public class F4RechargingRecipe extends CustomRecipe { 27 public F4RechargingRecipe( 28 //? if <1.21 29 /*ResourceLocation id,*/ 30 CraftingBookCategory craftingRecipeCategory) { 31 super( 32 //? if <1.21 33 /*id,*/ 34 craftingRecipeCategory); 35 } 36 37 public boolean matches( 38 //? if >1.21 { 39 CraftingInput 40 //?} else { 41 /*CraftingContainer 42 *///?} 43 craftingRecipeInput, Level world) { 44 boolean foundF4 = false; 45 //? if >1.21 { 46 int size = craftingRecipeInput.size(); 47 //?} else { 48 /*int size = craftingRecipeInput.getContainerSize(); 49 *///?} 50 for (int k = 0; k < size; k++) { 51 ItemStack itemStack = craftingRecipeInput.getItem(k); 52 if (itemStack.is(ModItems.F4.get())) { 53 if (foundF4) return false; 54 foundF4 = true; 55 } 56 else if (!itemStack.is(Items.OBSIDIAN)) return false; 57 } 58 return foundF4; 59 } 60 61 public @NotNull ItemStack assemble( 62 //? if >1.21 { 63 CraftingInput 64 //?} else { 65 /*CraftingContainer 66 *///?} 67 craftingRecipeInput, 68 //? if >1.21 { 69 HolderLookup.Provider 70 //?} else { 71 /*RegistryAccess 72 *///?} 73 wrapperLookup) { 74 ItemStack f4 = null; 75 int i = 0; 76 //? if >1.21 { 77 int size = craftingRecipeInput.size(); 78 //?} else { 79 /*int size = craftingRecipeInput.getContainerSize(); 80 *///?} 81 for (int k = 0; k < size; k++) { 82 ItemStack itemStack = craftingRecipeInput.getItem(k); 83 if (itemStack.is(ModItems.F4.get())) f4 = itemStack; 84 else if (!itemStack.isEmpty()) i++; 85 } 86 assert f4 != null; 87 int charge = F4Item.getCharge(f4); 88 if (i == 0) { 89 if (charge > 0) return Items.OBSIDIAN.getDefaultInstance().copyWithCount(Math.min(charge, 64)); //"removing obsidian" recipe 90 } 91 ItemStack result = f4.copyWithCount(1); 92 VersionMethods.apply(result, ModComponentTypes.CHARGE, charge+i); 93 if (charge + i == 0) { //"clearing data" recipe 94 VersionMethods.remove(result, ModComponentTypes.DESTINATION); 95 VersionMethods.remove(result, ModComponentTypes.COLOR); 96 } 97 return result; 98 } 99 100 @Override 101 public @NotNull NonNullList<ItemStack> getRemainingItems( 102 //? if >1.21 { 103 CraftingInput 104 //?} else { 105 /*CraftingContainer 106 *///?} 107 craftingRecipeInput) { 108 //? if >1.21 { 109 int size = craftingRecipeInput.size(); 110 //?} else { 111 /*int size = craftingRecipeInput.getContainerSize(); 112 *///?} 113 NonNullList<ItemStack> defaultedList = NonNullList.withSize(size, ItemStack.EMPTY); 114 ItemStack f4 = null; 115 int f4pos = 0; 116 for (int i = 0; i < defaultedList.size(); i++) { 117 ItemStack itemStack = craftingRecipeInput.getItem(i); 118 if (itemStack.is(ModItems.F4.get())) { 119 f4 = itemStack; 120 f4pos = i; 121 } 122 else if (!itemStack.isEmpty()) return defaultedList;//"adding obsidian" recipe 123 } 124 assert f4 != null; 125 int charge = F4Item.getCharge(f4); 126 if (charge == 0) return defaultedList; //"clearing data" recipe 127 charge = Math.max(charge - 64, 0); 128 ItemStack result = f4.copyWithCount(1); 129 VersionMethods.apply(result, ModComponentTypes.CHARGE, charge); 130 defaultedList.set(f4pos, result);//"adding obsidian" recipe 131 return defaultedList; 132 } 133 134 //? if <1.21.2 { 135 /*@Override 136 public boolean canCraftInDimensions(int width, int height) { 137 return width*height >= 2; 138 } 139 *///?} 140 141 @Override 142 public @NotNull RecipeSerializer<F4RechargingRecipe> getSerializer() { 143 return ModItemFunctions.F4_RECHARGING.get(); 144 } 145} 146