Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
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*///?}