package com.thebrokenrail.energonrelics.registry.infuser; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.registry.infuser.data.InfuserAction; import com.thebrokenrail.energonrelics.registry.infuser.data.InfuserEntry; import net.minecraft.item.DyeItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * Infuser Registry */ public final class InfuserRegistry { private static final Map map = new HashMap<>(); /** * Get From Registry * @param item Input Item * @return Infuser Registry Entry */ public static InfuserEntry get(Item item) { return map.get(item); } /** * Add To Registry * @param item Input Item * @param entry Infuser Registry Entry */ public static void add(Item item, InfuserEntry entry) { map.put(item, entry); } /** * Get Entry Set * @return Entry Set */ public static Set> entrySet() { return map.entrySet(); } /** * Convert Infuser Registry Entry To String * @param entry Infuser Registry Entry * @return String */ public static String toString(InfuserEntry entry) { Item item = null; for (Map.Entry mapEntry : entrySet()) { if (mapEntry.getValue() == entry) { item = mapEntry.getKey(); break; } } if (item != null) { return Registry.ITEM.getId(item).toString(); } else { return ""; } } /** * Get Infuser Registry Entry From String * @param str String * @return Infuser Registry Entry */ public static InfuserEntry fromString(String str) { Item item = Registry.ITEM.get(new Identifier(str)); return map.getOrDefault(item, null); } private static void addTransform(Item[] items, long cost, double successChance) { for (Item item : items) { InfuserAction[] success = new InfuserAction[items.length - 1]; int i = 0; for (Item item2 : items) { if (item != item2) { success[i] = new InfuserAction.ItemAction(new ItemStack(item2, 8)); i++; } } add(item, new InfuserEntry(cost, successChance, success, new InfuserAction[]{new InfuserAction.ParticleAction(), new InfuserAction.ItemAction(Items.STRING)})); } } static { add(Items.SUGAR, new InfuserEntry(320, 0.4d, new InfuserAction[]{new InfuserAction.ItemAction(new ItemStack(Items.GLOWSTONE_DUST, 48))}, new InfuserAction[]{new InfuserAction.ItemAction(Items.SUGAR_CANE), new InfuserAction.ExplosionAction()})); addTransform(getDyes(), 107, 0.4d); addTransform(getWool(), 168, 0.3d); add(Items.GOLDEN_APPLE, new InfuserEntry(510, 0.3d, new InfuserAction[]{new InfuserAction.ItemAction(Items.ENCHANTED_GOLDEN_APPLE)}, new InfuserAction[]{new InfuserAction.ExplosionAction()})); add(Items.COAL, new InfuserEntry(340, 0.2d, new InfuserAction[]{new InfuserAction.ItemAction(Items.DIAMOND)}, new InfuserAction[]{new InfuserAction.ExplosionAction()})); add(EnergonRelics.Items.VERIDIUM_INGOT, new InfuserEntry(240, 0.25d, new InfuserAction[]{new InfuserAction.ItemAction(EnergonRelics.Items.VERIDIUM_ORB)}, new InfuserAction[]{new InfuserAction.ParticleAction(), new InfuserAction.ItemAction(EnergonRelics.Items.VERIDIUM_POWDER), new InfuserAction.ExplosionAction()})); add(EnergonRelics.Items.VERIDIUM_POWDER, new InfuserEntry(170, 0.27d, new InfuserAction[]{new InfuserAction.ItemAction(new ItemStack(EnergonRelics.Items.VERIDIUM_INGOT, 2))}, new InfuserAction[]{new InfuserAction.ParticleAction(), new InfuserAction.ExplosionAction()})); add(Items.GOLD_NUGGET, new InfuserEntry(260, 0.3d, new InfuserAction[]{new InfuserAction.ItemAction(Items.GOLD_INGOT)}, new InfuserAction[]{new InfuserAction.ItemAction(Items.IRON_NUGGET), new InfuserAction.ParticleAction()})); add(Items.IRON_NUGGET, new InfuserEntry(260, 0.3d, new InfuserAction[]{new InfuserAction.ItemAction(Items.IRON_INGOT)}, new InfuserAction[]{new InfuserAction.ParticleAction()})); add(Items.IRON_ORE, new InfuserEntry(270, 0.42d, new InfuserAction[]{new InfuserAction.ItemAction(Items.GOLD_ORE)}, new InfuserAction[]{new InfuserAction.ItemAction(Items.IRON_ORE), new InfuserAction.ItemAction(Items.STONE)})); } private static Item[] getWool() { List wool = new ArrayList<>(); for (Item item : Registry.ITEM) { Identifier id = Registry.ITEM.getId(item); if (id.getNamespace().equals("minecraft") && id.getPath().endsWith("_wool")) { wool.add(item); } } return wool.toArray(new Item[0]); } private static Item[] getDyes() { DyeColor[] colors = DyeColor.values(); Item[] dyes = new Item[colors.length]; for (int i = 0; i < colors.length; i++) { dyes[i] = DyeItem.byColor(colors[i]); } return dyes; } }