Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 201 lines 9.9 kB view raw
1package net.lerariemann.infinity.compat.emi; 2 3//? if <1.21.2 { 4 5/*import dev.emi.emi.api.EmiEntrypoint; 6import dev.emi.emi.api.EmiPlugin; 7import dev.emi.emi.api.EmiRegistry; 8import dev.emi.emi.api.recipe.EmiCraftingRecipe; 9import dev.emi.emi.api.recipe.EmiRecipe; 10import dev.emi.emi.api.recipe.EmiRecipeCategory; 11import dev.emi.emi.api.recipe.EmiWorldInteractionRecipe; 12import dev.emi.emi.api.render.EmiTexture; 13import dev.emi.emi.api.stack.EmiIngredient; 14import dev.emi.emi.api.stack.EmiStack; 15import dev.emi.emi.api.widget.TextWidget; 16import dev.emi.emi.api.widget.WidgetHolder; 17import net.lerariemann.infinity.item.function.ChromaticColoringRecipe; 18import net.lerariemann.infinity.registry.core.ModBlocks; 19import net.lerariemann.infinity.registry.core.ModItems; 20import net.lerariemann.infinity.item.function.CollisionCraftingRecipe; 21import net.lerariemann.infinity.registry.core.ModItemFunctions; 22import net.lerariemann.infinity.util.InfinityMethods; 23import net.lerariemann.infinity.util.platform.InfinityPlatform; 24import net.minecraft.ChatFormatting; 25import net.minecraft.client.Minecraft; 26import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; 27import net.minecraft.core.RegistryAccess; 28//? if >1.21 { 29import net.minecraft.core.component.DataComponents; 30import net.minecraft.world.item.alchemy.PotionContents; 31import net.minecraft.world.item.crafting.RecipeHolder; 32//?} else { 33/^import net.minecraft.world.item.alchemy.PotionUtils; 34^///?} 35import net.minecraft.network.chat.Component; 36import net.minecraft.resources.ResourceLocation; 37import net.minecraft.util.FormattedCharSequence; 38import net.minecraft.world.item.ItemStack; 39import net.minecraft.world.item.Items; 40import net.minecraft.world.item.alchemy.Potions; 41import net.minecraft.world.item.crafting.Ingredient; 42import net.minecraft.world.item.crafting.RecipeManager; 43import java.util.ArrayList; 44import java.util.List; 45 46@EmiEntrypoint 47public class EmiCompat implements EmiPlugin { 48 public static final ResourceLocation INFINITY_SPRITES = InfinityMethods.getId( "textures/gui/emi_simplified_textures.png"); 49 public static final EmiStack PORTAL_WORKSTATION = EmiStack.of(ModItems.PORTAL_ITEM.get()); 50 public static final EmiRecipeCategory PORTAL_CRAFTING 51 = new EmiRecipeCategory(ModItemFunctions.PORTAL_CRAFTING.getId(), PORTAL_WORKSTATION, new EmiTexture(INFINITY_SPRITES, 0, 0, 16, 16)); 52 public static EmiStack IRIDESCENCE_WORKSTATION = EmiStack.of(InfinityPlatform.INSTANCE.getIridescenceStill().get()); 53 public static EmiStack IRIDESCENCE_CATALYST = IRIDESCENCE_WORKSTATION.copy().setRemainder(IRIDESCENCE_WORKSTATION); 54 55 public static final EmiRecipeCategory IRIDESCENCE_CRAFTING 56 = new EmiRecipeCategory(ModItemFunctions.IRIDESCENCE_CRAFTING.getId(), IRIDESCENCE_WORKSTATION, new EmiTexture(INFINITY_SPRITES, 0, 0, 16, 16)); 57 public static final EmiRecipeCategory CHROMATIC 58 = new EmiRecipeCategory(InfinityMethods.getId("chromatic"), 59 EmiStack.of(ModBlocks.CHROMATIC_WOOL.get()), new EmiTexture(INFINITY_SPRITES, 0, 0, 16, 16)); 60 61 @Override 62 public void register(EmiRegistry registry) { 63 RecipeManager manager = registry.getRecipeManager(); 64 RegistryAccess registryManager = Minecraft.getInstance().level.registryAccess(); 65 66 //collision recipes 67 registry.addCategory(PORTAL_CRAFTING); 68 registry.addWorkstation(PORTAL_CRAFTING, PORTAL_WORKSTATION); 69 for ( 70 //? if >1.21 { 71 RecipeHolder<CollisionCraftingRecipe> 72 //?} else { 73 /^CollisionCraftingRecipe 74 ^///?} 75 recipe : manager.getAllRecipesFor(ModItemFunctions.PORTAL_CRAFTING_TYPE.get())) { 76 //? if >1.21 { 77 registry.addRecipe(new PortalCraftingEmiRecipe(recipe.id(), recipe.value(), registryManager)); 78 //?} else { 79 /^registry.addRecipe(new PortalCraftingEmiRecipe(recipe.getId(), recipe, registryManager)); 80 ^///?} 81 } 82 registry.addCategory(IRIDESCENCE_CRAFTING); 83 registry.addWorkstation(IRIDESCENCE_CRAFTING, IRIDESCENCE_WORKSTATION); 84 for ( 85 //? if >1.21 { 86 RecipeHolder<CollisionCraftingRecipe> 87 //?} else { 88 /^CollisionCraftingRecipe 89 ^///?} 90 recipe : manager.getAllRecipesFor(ModItemFunctions.IRIDESCENCE_CRAFTING_TYPE.get())) { 91 //? if >1.21 { 92 registry.addRecipe(new IridesenceCraftingEmiRecipe(recipe.id(), recipe.value(), registryManager)); 93 //?} else { 94 /^registry.addRecipe(new IridesenceCraftingEmiRecipe(recipe.getId(), recipe, registryManager)); 95 ^///?} 96 } 97 98 //item interactions when clicked on chromatic blocks 99 registry.addCategory(CHROMATIC); 100 registry.addWorkstation(CHROMATIC, EmiStack.of(ModBlocks.CHROMATIC_WOOL.get())); 101 registry.addWorkstation(CHROMATIC, EmiStack.of(ModBlocks.CHROMATIC_CARPET.get())); 102 registry.addRecipe(ChromaticEmiRecipe.withInfo("color", ModItems.CHROMATIC_MATTER.get())); 103 registry.addRecipe(ChromaticEmiRecipe.withInfo("hue", ModItems.IRIDESCENT_STAR.get())); 104 registry.addRecipe(ChromaticEmiRecipe.of("saturation_plus", Items.AMETHYST_SHARD)); 105 registry.addRecipe(ChromaticEmiRecipe.of("saturation_minus", ModItems.FOOTPRINT.get())); 106 registry.addRecipe(ChromaticEmiRecipe.of("brightness_plus", ModItems.WHITE_MATTER.get())); 107 registry.addRecipe(ChromaticEmiRecipe.of("brightness_minus", ModItems.BLACK_MATTER.get())); 108 109 //recoloring with chroma matter in the crafting grid 110 EmiStack matter = EmiStack.of(ModItems.CHROMATIC_MATTER.get()); 111 EmiStack matter_catalyst = matter.copy().setRemainder(matter); 112 for ( 113 //? if >1.21 { 114 RecipeHolder<ChromaticColoringRecipe> recipeHolder 115 //?} else { 116 /^ChromaticColoringRecipe recipe 117 ^///?} 118 : manager.getAllRecipesFor(ModItemFunctions.CHROMATIC_COLORING_TYPE.get())) { 119 120 //? if >1.21 { 121 var id = recipeHolder.id(); 122 var recipe = recipeHolder.value(); 123 //?} else { 124 /^var id = recipe.getId(); 125 ^///?} 126 127 List<EmiIngredient> input = new ArrayList<>(); 128 input.add(matter_catalyst); 129 input.add(EmiIngredient.of(recipe.getInput())); 130 131 registry.addRecipe(new EmiCraftingRecipe(input, 132 EmiStack.of(recipe.getResultItem(registryManager)), 133 id)); 134 } 135 136 //chroma carpet from wool 137 List<EmiIngredient> input = new ArrayList<>(); 138 input.add(EmiStack.of(ModItems.CHROMATIC_WOOL.get())); 139 input.add(EmiStack.of(ModItems.CHROMATIC_WOOL.get())); 140 registry.addRecipe(new EmiCraftingRecipe(input, 141 EmiStack.of(ModItems.CHROMATIC_CARPET.get().getDefaultInstance().copyWithCount(3)), 142 InfinityMethods.getId("/chromatic_carpet"))); 143 144 //brewing iridescence 145 ItemStack awkward = Items.POTION.getDefaultInstance(); 146 //? if >1.21 { 147 awkward.update(DataComponents.POTION_CONTENTS, 148 PotionContents.EMPTY, 149 Potions.AWKWARD, 150 PotionContents::withPotion); 151 //?} else { 152 /^PotionUtils.setPotion(awkward, Potions.AWKWARD); 153 ^///?} 154 EmiRecipe chromaBrew = new EmiBrewingRecipe(EmiStack.of(awkward), 155 EmiIngredient.of(Ingredient.of(ModItems.CHROMATIC_MATTER.get())), 156 EmiStack.of(ModItems.CHROMATIC_POTION.get().getDefaultInstance()), 157 InfinityMethods.getId("/chromatic_bottle")); 158 registry.addRecipe(chromaBrew); 159 160 //bottling iridescence 161 registry.addRecipe(EmiWorldInteractionRecipe.builder() 162 .id(InfinityMethods.getId("/iridescence/bottling")) 163 .leftInput(EmiStack.of(Items.GLASS_BOTTLE.getDefaultInstance())) 164 .rightInput(IRIDESCENCE_CATALYST, false) 165 .output(EmiStack.of(ModItems.IRIDESCENT_POTION.get().getDefaultInstance())) 166 .build()); 167 168 //star of lang effects 169 registry.addRecipe(EmiWorldInteractionRecipe.builder() 170 .id(InfinityMethods.getId("/iridescence/wool_uncolor")) 171 .leftInput(EmiStack.of(ModItems.IRIDESCENT_WOOL.get().getDefaultInstance())) 172 .rightInput(EmiStack.of(ModItems.STAR_OF_LANG.get().getDefaultInstance()), true) 173 .output(EmiStack.of(ModItems.CHROMATIC_WOOL.get().getDefaultInstance())) 174 .build()); 175 registry.addRecipe(EmiWorldInteractionRecipe.builder() 176 .id(InfinityMethods.getId("/iridescence/carpet_uncolor")) 177 .leftInput(EmiStack.of(ModItems.IRIDESCENT_CARPET.get().getDefaultInstance())) 178 .rightInput(EmiStack.of(ModItems.STAR_OF_LANG.get().getDefaultInstance()), true) 179 .output(EmiStack.of(ModItems.CHROMATIC_CARPET.get().getDefaultInstance())) 180 .build()); 181 } 182 183 public static void addInfo(WidgetHolder widgets, int x, int y, Component info) { 184 widgets.add(new TextWidgetWithTooltip(Component.literal("ℹ").withStyle(ChatFormatting.GRAY).getVisualOrderText(), 185 x, y, 0xFFFFFF, false, info)); 186 } 187 188 public static class TextWidgetWithTooltip extends TextWidget { 189 Component tooltip; 190 191 public TextWidgetWithTooltip(FormattedCharSequence text, int x, int y, int color, boolean shadow, Component tooltip) { 192 super(text, x, y, color, shadow); 193 this.tooltip = tooltip; 194 } 195 public List<ClientTooltipComponent> getTooltip(int mouseX, int mouseY) { 196 return List.of(ClientTooltipComponent.create(tooltip.getVisualOrderText())); 197 } 198 } 199} 200 201*///?}