This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
EnergonRelics/src/main/java/com/thebrokenrail/energonrelics/registry/infuser/InfuserRegistry.java

134 lines
5.1 KiB
Java

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<Item, InfuserEntry> 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<Map.Entry<Item, InfuserEntry>> 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<Item, InfuserEntry> 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()}));
}
private static Item[] getWool() {
List<Item> 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;
}
}