1.18 ayutac r8 woolomania. Thanks to Ayutac

* Added woolomania and started carpetmania

* Added ColoredItem utility class

* Removed optional getters for normal ones

* Added ColoredItem Util and used that for chem. Reactor

* Added documentation for the util class
This commit is contained in:
Ayutac 2022-05-05 11:07:40 +02:00 committed by GitHub
parent f75ebc2361
commit 07547dfd6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 383 additions and 200 deletions

View file

@ -0,0 +1,287 @@
package reborncore.common.util;
import com.google.common.collect.ImmutableMap;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import org.apache.commons.lang3.tuple.Pair;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public enum ColoredItem {
BLACK(Items.BLACK_DYE, Items.BLACK_WOOL, Items.BLACK_CARPET, Items.BLACK_BED, Items.BLACK_STAINED_GLASS, Items.BLACK_STAINED_GLASS_PANE, Items.BLACK_TERRACOTTA, Items.BLACK_GLAZED_TERRACOTTA, Items.BLACK_CONCRETE_POWDER, Items.BLACK_CONCRETE, Items.BLACK_SHULKER_BOX, Items.BLACK_BANNER, Items.BLACK_CANDLE),
BLUE(Items.BLUE_DYE, Items.BLUE_WOOL, Items.BLUE_CARPET, Items.BLUE_BED, Items.BLUE_STAINED_GLASS, Items.BLUE_STAINED_GLASS_PANE, Items.BLUE_TERRACOTTA, Items.BLUE_GLAZED_TERRACOTTA, Items.BLUE_CONCRETE_POWDER, Items.BLUE_CONCRETE, Items.BLUE_SHULKER_BOX, Items.BLUE_BANNER, Items.BLUE_CANDLE),
BROWN(Items.BROWN_DYE, Items.BROWN_WOOL, Items.BROWN_CARPET, Items.BROWN_BED, Items.BROWN_STAINED_GLASS, Items.BROWN_STAINED_GLASS_PANE, Items.BROWN_TERRACOTTA, Items.BROWN_GLAZED_TERRACOTTA, Items.BROWN_CONCRETE_POWDER, Items.BROWN_CONCRETE, Items.BROWN_SHULKER_BOX, Items.BROWN_BANNER, Items.BROWN_CANDLE),
CYAN(Items.CYAN_DYE, Items.CYAN_WOOL, Items.CYAN_CARPET, Items.CYAN_BED, Items.CYAN_STAINED_GLASS, Items.CYAN_STAINED_GLASS_PANE, Items.CYAN_TERRACOTTA, Items.CYAN_GLAZED_TERRACOTTA, Items.CYAN_CONCRETE_POWDER, Items.CYAN_CONCRETE, Items.CYAN_SHULKER_BOX, Items.CYAN_BANNER, Items.CYAN_CANDLE),
GRAY(Items.GRAY_DYE, Items.GRAY_WOOL, Items.GRAY_CARPET, Items.GRAY_BED, Items.GRAY_STAINED_GLASS, Items.GRAY_STAINED_GLASS_PANE, Items.GRAY_TERRACOTTA, Items.GRAY_GLAZED_TERRACOTTA, Items.GRAY_CONCRETE_POWDER, Items.GRAY_CONCRETE, Items.GRAY_SHULKER_BOX, Items.GRAY_BANNER, Items.GRAY_CANDLE),
GREEN(Items.GREEN_DYE, Items.GREEN_WOOL, Items.GREEN_CARPET, Items.GREEN_BED, Items.GREEN_STAINED_GLASS, Items.GREEN_STAINED_GLASS_PANE, Items.GREEN_TERRACOTTA, Items.GREEN_GLAZED_TERRACOTTA, Items.GREEN_CONCRETE_POWDER, Items.GREEN_CONCRETE, Items.GREEN_SHULKER_BOX, Items.GREEN_BANNER, Items.GREEN_CANDLE),
LIGHT_BLUE(Items.LIGHT_BLUE_DYE, Items.LIGHT_BLUE_WOOL, Items.LIGHT_BLUE_CARPET, Items.LIGHT_BLUE_BED, Items.LIGHT_BLUE_STAINED_GLASS, Items.LIGHT_BLUE_STAINED_GLASS_PANE, Items.LIGHT_BLUE_TERRACOTTA, Items.LIGHT_BLUE_GLAZED_TERRACOTTA, Items.LIGHT_BLUE_CONCRETE_POWDER, Items.LIGHT_BLUE_CONCRETE, Items.LIGHT_BLUE_SHULKER_BOX, Items.LIGHT_BLUE_BANNER, Items.LIGHT_BLUE_CANDLE),
LIGHT_GRAY(Items.LIGHT_GRAY_DYE, Items.LIGHT_GRAY_WOOL, Items.LIGHT_GRAY_CARPET, Items.LIGHT_GRAY_BED, Items.LIGHT_GRAY_STAINED_GLASS, Items.LIGHT_GRAY_STAINED_GLASS_PANE, Items.LIGHT_GRAY_TERRACOTTA, Items.LIGHT_GRAY_GLAZED_TERRACOTTA, Items.LIGHT_GRAY_CONCRETE_POWDER, Items.LIGHT_GRAY_CONCRETE, Items.LIGHT_GRAY_SHULKER_BOX, Items.LIGHT_GRAY_BANNER, Items.LIGHT_GRAY_CANDLE),
LIME(Items.LIME_DYE, Items.LIME_WOOL, Items.LIME_CARPET, Items.LIME_BED, Items.LIME_STAINED_GLASS, Items.LIME_STAINED_GLASS_PANE, Items.LIME_TERRACOTTA, Items.LIME_GLAZED_TERRACOTTA, Items.LIME_CONCRETE_POWDER, Items.LIME_CONCRETE, Items.LIME_SHULKER_BOX, Items.LIME_BANNER, Items.LIME_CANDLE),
MAGENTA(Items.MAGENTA_DYE, Items.MAGENTA_WOOL, Items.MAGENTA_CARPET, Items.MAGENTA_BED, Items.MAGENTA_STAINED_GLASS, Items.MAGENTA_STAINED_GLASS_PANE, Items.MAGENTA_TERRACOTTA, Items.MAGENTA_GLAZED_TERRACOTTA, Items.MAGENTA_CONCRETE_POWDER, Items.MAGENTA_CONCRETE, Items.MAGENTA_SHULKER_BOX, Items.MAGENTA_BANNER, Items.MAGENTA_CANDLE),
NEUTRAL(null, null, null, null, Items.GLASS, Items.GLASS_PANE, Items.TERRACOTTA, null, null, null, Items.SHULKER_BOX, null, Items.CANDLE),
ORANGE(Items.ORANGE_DYE, Items.ORANGE_WOOL, Items.ORANGE_CARPET, Items.ORANGE_BED, Items.ORANGE_STAINED_GLASS, Items.ORANGE_STAINED_GLASS_PANE, Items.ORANGE_TERRACOTTA, Items.ORANGE_GLAZED_TERRACOTTA, Items.ORANGE_CONCRETE_POWDER, Items.ORANGE_CONCRETE, Items.ORANGE_SHULKER_BOX, Items.ORANGE_BANNER, Items.ORANGE_CANDLE),
PINK(Items.PINK_DYE, Items.PINK_WOOL, Items.PINK_CARPET, Items.PINK_BED, Items.PINK_STAINED_GLASS, Items.PINK_STAINED_GLASS_PANE, Items.PINK_TERRACOTTA, Items.PINK_GLAZED_TERRACOTTA, Items.PINK_CONCRETE_POWDER, Items.PINK_CONCRETE, Items.PINK_SHULKER_BOX, Items.PINK_BANNER, Items.PINK_CANDLE),
PURPLE(Items.PURPLE_DYE, Items.PURPLE_WOOL, Items.PURPLE_CARPET, Items.PURPLE_BED, Items.PURPLE_STAINED_GLASS, Items.PURPLE_STAINED_GLASS_PANE, Items.PURPLE_TERRACOTTA, Items.PURPLE_GLAZED_TERRACOTTA, Items.PURPLE_CONCRETE_POWDER, Items.PURPLE_CONCRETE, Items.PURPLE_SHULKER_BOX, Items.PURPLE_BANNER, Items.PURPLE_CANDLE),
RED(Items.RED_DYE, Items.RED_WOOL, Items.RED_CARPET, Items.RED_BED, Items.RED_STAINED_GLASS, Items.RED_STAINED_GLASS_PANE, Items.RED_TERRACOTTA, Items.RED_GLAZED_TERRACOTTA, Items.RED_CONCRETE_POWDER, Items.RED_CONCRETE, Items.RED_SHULKER_BOX, Items.RED_BANNER, Items.RED_CANDLE),
WHITE(Items.WHITE_DYE, Items.WHITE_WOOL, Items.WHITE_CARPET, Items.WHITE_BED, Items.WHITE_STAINED_GLASS, Items.WHITE_STAINED_GLASS_PANE, Items.WHITE_TERRACOTTA, Items.WHITE_GLAZED_TERRACOTTA, Items.WHITE_CONCRETE_POWDER, Items.WHITE_CONCRETE, Items.WHITE_SHULKER_BOX, Items.WHITE_BANNER, Items.WHITE_CANDLE),
YELLOW(Items.YELLOW_DYE, Items.YELLOW_WOOL, Items.YELLOW_CARPET, Items.YELLOW_BED, Items.YELLOW_STAINED_GLASS, Items.YELLOW_STAINED_GLASS_PANE, Items.YELLOW_TERRACOTTA, Items.YELLOW_GLAZED_TERRACOTTA, Items.YELLOW_CONCRETE_POWDER, Items.YELLOW_CONCRETE, Items.YELLOW_SHULKER_BOX, Items.YELLOW_BANNER, Items.YELLOW_CANDLE);
private Item dye;
private Item wool;
private Item carpet;
private Item bed;
private Item glass;
private Item glassPane;
private Item terracotta;
private Item glazedTerracotta;
private Item concretePowder;
private Item concrete;
private Item shulkerBox;
private Item banner;
private Item candle;
private static Map<Pair<ColoredItem, ColoredItem>, ColoredItem> vanillaMixingMap = null;
private static Map<Pair<ColoredItem, ColoredItem>, ColoredItem> extendedMixingMap = null;
private static Map<Pair<ColoredItem, ColoredItem>, ColoredItem> extendedMixingMapNoNeutral = null;
ColoredItem(Item dye, Item wool, Item carpet, Item bed, Item glass, Item glassPane, Item terracotta, Item glazedTerracotta, Item concretePowder, Item concrete, Item shulkerBox, Item banner, Item candle) {
this.dye = dye;
this.wool = wool;
this.carpet = carpet;
this.bed = bed;
this.glass = glass;
this.glassPane = glassPane;
this.terracotta = terracotta;
this.glazedTerracotta = glazedTerracotta;
this.concretePowder = concretePowder;
this.concrete = concrete;
this.shulkerBox = shulkerBox;
this.banner = banner;
this.candle = candle;
}
private static void putSym(ImmutableMap.Builder<Pair<ColoredItem, ColoredItem>, ColoredItem> builder, ColoredItem item1, ColoredItem item2, ColoredItem result) {
Objects.requireNonNull(builder);
Objects.requireNonNull(item1);
Objects.requireNonNull(item2);
Objects.requireNonNull(result);
builder.put(Pair.of(item1, item2), result);
builder.put(Pair.of(item2, item1), result);
}
/**
* Returns an immutable map that encodes the vanilla color mixing recipes with 2 inputs + a neutral mixing ingredient.
* <p>
* The key is a pair of the two inputs and the value is the mixing result.
* Note that the map is symmetric and irreflexive in the key, i.e. when ((a,b),c) in the map, then also ((b,a),c), but never a = b.
* The {@link #NEUTRAL} mixing ingredient means that the other pair entry equals the result.
* The map will be filled upon the first call of this method.
* </p>
* @see #createVanillaMixingColorStream(ColoredItem)
* @see #getExtendedMixingMap(boolean)
*/
public static Map<Pair<ColoredItem, ColoredItem>, ColoredItem> getVanillaMixingMap() {
if (vanillaMixingMap != null)
return vanillaMixingMap;
var builder = new ImmutableMap.Builder<Pair<ColoredItem, ColoredItem>, ColoredItem>();
for (ColoredItem item : values()) {
if (item != NEUTRAL) {
putSym(builder, NEUTRAL, item, item);
}
}
// ordered by result
putSym(builder, BLUE, GREEN, CYAN);
putSym(builder, BLACK, WHITE, GRAY);
putSym(builder, PURPLE, PINK, MAGENTA);
putSym(builder, BLUE, WHITE, LIGHT_BLUE);
putSym(builder, GRAY, WHITE, LIGHT_GRAY);
putSym(builder, GREEN, WHITE, LIME);
putSym(builder, RED, WHITE, PINK);
putSym(builder, RED, BLUE, PURPLE);
vanillaMixingMap = builder.build();
return vanillaMixingMap;
}
/**
* Curries the map returned by {@link #getVanillaMixingMap()} into a stream, leaving the map itself unchanged.
* <p>
* If this method is f, and the map is m, then f(a) is a stream s such that s(b) = c = m(a,b), with ((a,b),c)
* being an element in the map m.
* </p>
* @see #createVanillaMixingColorMap(ColoredItem)
* @see #createExtendedMixingColorStream(ColoredItem, boolean, boolean)
*/
public static Stream<Pair<ColoredItem, ColoredItem>> createVanillaMixingColorStream(ColoredItem color) {
Objects.requireNonNull(color);
return getVanillaMixingMap().entrySet().stream()
.filter(entry -> entry.getKey().getLeft() == color)
.map(entry -> Pair.of(entry.getKey().getRight(),entry.getValue()));
}
/**
* Consumes a stream returned by {@link #createVanillaMixingColorStream(ColoredItem)} into a map object.
* @see #createExtendedMixingColorMap(ColoredItem, boolean, boolean)
*/
public static Map<ColoredItem, ColoredItem> createVanillaMixingColorMap(ColoredItem color) {
Objects.requireNonNull(color);
return createVanillaMixingColorStream(color).collect(Collectors.toMap(Pair::getLeft, Pair::getRight));
}
/**
* Returns an immutable map that encodes extended color mixing recipes with 2 inputs + possibly a neutral mixing ingredient.
* <p>
* The key is a pair of the two inputs and the value is the mixing result.
* Note that the map is symmetric and irreflexive in the key, i.e. when ((a,b),c) in the map, then also ((b,a),c), but never a = b.
* The {@link #NEUTRAL} mixing ingredient means that the other pair entry equals the result.
* The map will be filled upon the first call of this method.
* </p>
* @param withNeutral If the {@link #NEUTRAL} ingredient is provided. If not, the color {@link #WHITE} will be handled as the neutral ingredient.
* @see #createExtendedMixingColorStream(ColoredItem, boolean, boolean)
* @see #getVanillaMixingMap()
*/
public static Map<Pair<ColoredItem, ColoredItem>, ColoredItem> getExtendedMixingMap(boolean withNeutral) {
if (withNeutral && extendedMixingMap != null)
return extendedMixingMap;
if (!withNeutral && extendedMixingMapNoNeutral != null)
return extendedMixingMapNoNeutral;
var builder = new ImmutableMap.Builder<Pair<ColoredItem, ColoredItem>, ColoredItem>();
builder.putAll(getVanillaMixingMap());
// ordered by result
putSym(builder, BLACK, GRAY, BLACK);
putSym(builder, BLUE, LIGHT_BLUE, BLUE);
putSym(builder, BLUE, CYAN, BLUE);
putSym(builder, GRAY, CYAN, BLUE);
putSym(builder, BLACK, ORANGE, BROWN);
putSym(builder, BROWN, ORANGE, BROWN);
putSym(builder, GREEN, RED, BROWN);
putSym(builder, LIGHT_BLUE, CYAN, CYAN);
putSym(builder, GRAY, LIGHT_GRAY, GRAY);
putSym(builder, BLACK, LIGHT_GRAY, GRAY);
putSym(builder, BLUE, YELLOW, GREEN);
putSym(builder, LIME, GRAY, GREEN);
putSym(builder, LIME, GREEN, GREEN);
putSym(builder, PINK, GRAY, MAGENTA);
putSym(builder, BLUE, LIGHT_GRAY, LIGHT_BLUE);
putSym(builder, CYAN, LIGHT_GRAY, LIGHT_BLUE);
putSym(builder, LIGHT_GRAY, LIGHT_BLUE, LIGHT_BLUE);
putSym(builder, WHITE, LIGHT_GRAY, LIGHT_GRAY);
putSym(builder, YELLOW, LIGHT_BLUE, LIME);
putSym(builder, YELLOW, CYAN, LIME);
putSym(builder, YELLOW, ORANGE, ORANGE);
putSym(builder, PINK, ORANGE, ORANGE);
putSym(builder, MAGENTA, LIGHT_GRAY, PINK);
putSym(builder, MAGENTA, WHITE, PINK);
putSym(builder, MAGENTA, BLUE, PURPLE);
putSym(builder, MAGENTA, PURPLE, PURPLE);
putSym(builder, MAGENTA, RED, RED);
putSym(builder, ORANGE, RED, RED);
putSym(builder, PINK, RED, RED);
extendedMixingMap = builder.build();
builder = new ImmutableMap.Builder<>();
for (var entry : extendedMixingMap.entrySet()) {
if (entry.getKey().getLeft() != NEUTRAL && entry.getKey().getRight() != NEUTRAL &&
entry.getKey().getLeft() != WHITE && entry.getKey().getRight() != WHITE)
builder.put(entry);
}
for (ColoredItem item : values()) {
if (item != WHITE && item != NEUTRAL) {
putSym(builder, WHITE, item, item);
}
}
extendedMixingMapNoNeutral = builder.build();
if (withNeutral)
return extendedMixingMap;
return extendedMixingMapNoNeutral;
}
/**
* Curries the map returned by {@link #getExtendedMixingMap(boolean)} into a stream, leaving the map itself unchanged.
* <p>
* If this method is f, and the map is m, then f(a) is a stream s such that s(b) = c = m(a,b), with ((a,b),c)
* being an element in the map m.
* </p>
* @param withNeutral If the {@link #NEUTRAL} ingredient is provided. If not, the color {@link #WHITE} will be handled as the neutral ingredient.
* @param differentResults If {@code true}, values like s(b) = b will be sorted out.
* @see #createExtendedMixingColorMap(ColoredItem, boolean, boolean)
* @see #createVanillaMixingColorStream(ColoredItem)
*/
public static Stream<Pair<ColoredItem, ColoredItem>> createExtendedMixingColorStream(ColoredItem color, boolean withNeutral, boolean differentResults) {
Objects.requireNonNull(color);
return getExtendedMixingMap(withNeutral).entrySet().stream()
.filter(entry -> entry.getKey().getLeft() == color && (!differentResults || entry.getKey().getRight() != entry.getValue()))
.map(entry -> Pair.of(entry.getKey().getRight(),entry.getValue()));
}
/**
* Consumes a stream returned by {@link #createExtendedMixingColorStream(ColoredItem, boolean, boolean)} into a map object.
* @see #createVanillaMixingColorMap(ColoredItem)
*/
public static Map<ColoredItem, ColoredItem> createExtendedMixingColorMap(ColoredItem color, boolean withNeutral, boolean differentResults) {
Objects.requireNonNull(color);
return createExtendedMixingColorStream(color, withNeutral, differentResults)
.collect(Collectors.toMap(Pair::getLeft, Pair::getRight));
}
public Item getDye() {
return dye;
}
public Item getWool() {
return wool;
}
public Item getCarpet() {
return carpet;
}
public Item getBed() {
return bed;
}
public Item getGlass() {
return glass;
}
public Item getGlassPane() {
return glassPane;
}
public Item getTerracotta() {
return terracotta;
}
public Item getGlazedTerracotta() {
return glazedTerracotta;
}
public Item getConcretePowder() {
return concretePowder;
}
public Item getConcrete() {
return concrete;
}
public Item getShulkerBox() {
return shulkerBox;
}
public Item getBanner() {
return banner;
}
public Item getCandle() {
return candle;
}
}

View file

@ -26,7 +26,7 @@ package techreborn.datagen.recipes.machine.chemical_reactor
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator
import net.minecraft.item.ItemStack
import net.minecraft.item.Items
import reborncore.common.util.ColoredItem
import techreborn.datagen.recipes.TechRebornRecipesProvider
class ChemicalReactorRecipesProvider extends TechRebornRecipesProvider {
@ -40,224 +40,120 @@ class ChemicalReactorRecipesProvider extends TechRebornRecipesProvider {
@Override
void generateRecipes() {
generateWoolFromWhite()
generateCarpetFromWhite()
generateConcretePowderFromWhite()
generateCandleFromNeutral()
generateGlassFromNeutral()
generateGlassPaneFromNeutral()
generateTerracottaFromNeutral()
generateWool()
generateCarpet()
generateConcretePowder()
generateCandle()
generateGlass()
generateGlassPane()
generateTerracotta()
}
void generateWoolFromWhite() {
[
(Items.BLACK_DYE): Items.BLACK_WOOL,
(Items.BLUE_DYE): Items.BLUE_WOOL,
(Items.BROWN_DYE): Items.BROWN_WOOL,
(Items.CYAN_DYE): Items.CYAN_WOOL,
(Items.GRAY_DYE): Items.GRAY_WOOL,
(Items.GREEN_DYE): Items.GREEN_WOOL,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_WOOL,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_WOOL,
(Items.LIME_DYE): Items.LIME_WOOL,
(Items.MAGENTA_DYE): Items.MAGENTA_WOOL,
(Items.ORANGE_DYE): Items.ORANGE_WOOL,
(Items.PINK_DYE): Items.PINK_WOOL,
(Items.PURPLE_DYE): Items.PURPLE_WOOL,
(Items.RED_DYE): Items.RED_WOOL,
// (Items.WHITE_DYE): Items.WHITE_WOOL, // white stays white
(Items.YELLOW_DYE): Items.YELLOW_WOOL
].each {dye, wool ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.WHITE_WOOL, 4)
output new ItemStack(wool, 4)
source "white_wool"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
}
void generateWool() {
for (ColoredItem color : ColoredItem.values())
ColoredItem.createExtendedMixingColorStream(color, false, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getWool(), 4)
output new ItemStack(pair.getRight().getWool(), 4)
source pair.getLeft().getWool().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
void generateCarpetFromWhite() {
[
(Items.BLACK_DYE): Items.BLACK_CARPET,
(Items.BLUE_DYE): Items.BLUE_CARPET,
(Items.BROWN_DYE): Items.BROWN_CARPET,
(Items.CYAN_DYE): Items.CYAN_CARPET,
(Items.GRAY_DYE): Items.GRAY_CARPET,
(Items.GREEN_DYE): Items.GREEN_CARPET,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_CARPET,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_CARPET,
(Items.LIME_DYE): Items.LIME_CARPET,
(Items.MAGENTA_DYE): Items.MAGENTA_CARPET,
(Items.ORANGE_DYE): Items.ORANGE_CARPET,
(Items.PINK_DYE): Items.PINK_CARPET,
(Items.PURPLE_DYE): Items.PURPLE_CARPET,
(Items.RED_DYE): Items.RED_CARPET,
// (Items.WHITE_DYE): Items.WHITE_CARPET, // white stays white
(Items.YELLOW_DYE): Items.YELLOW_CARPET
].each {dye, carpet ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.WHITE_CARPET, 8)
output new ItemStack(carpet, 8)
source "white_carpet"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
}
void generateCarpet() {
for (ColoredItem color : ColoredItem.values())
ColoredItem.createExtendedMixingColorStream(color, false, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getCarpet(), 8)
output new ItemStack(pair.getRight().getCarpet(), 8)
source pair.getLeft().getCarpet().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
void generateConcretePowderFromWhite() {
[
(Items.BLACK_DYE): Items.BLACK_CONCRETE_POWDER,
(Items.BLUE_DYE): Items.BLUE_CONCRETE_POWDER,
(Items.BROWN_DYE): Items.BROWN_CONCRETE_POWDER,
(Items.CYAN_DYE): Items.CYAN_CONCRETE_POWDER,
(Items.GRAY_DYE): Items.GRAY_CONCRETE_POWDER,
(Items.GREEN_DYE): Items.GREEN_CONCRETE_POWDER,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_CONCRETE_POWDER,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_CONCRETE_POWDER,
(Items.LIME_DYE): Items.LIME_CONCRETE_POWDER,
(Items.MAGENTA_DYE): Items.MAGENTA_CONCRETE_POWDER,
(Items.ORANGE_DYE): Items.ORANGE_CONCRETE_POWDER,
(Items.PINK_DYE): Items.PINK_CONCRETE_POWDER,
(Items.PURPLE_DYE): Items.PURPLE_CONCRETE_POWDER,
(Items.RED_DYE): Items.RED_CONCRETE_POWDER,
// (Items.WHITE_DYE): Items.WHITE_CONCRETE_POWDER, // white stays white
(Items.YELLOW_DYE): Items.YELLOW_CONCRETE_POWDER
].each {dye, concretePowder ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.WHITE_CONCRETE_POWDER, 8)
output new ItemStack(concretePowder, 8)
source "white_concrete_powder"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
}
void generateConcretePowder() {
for (ColoredItem color : ColoredItem.values())
ColoredItem.createExtendedMixingColorStream(color, false, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getConcretePowder(), 8)
output new ItemStack(pair.getRight().getCarpet(), 8)
source pair.getLeft().getConcretePowder().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
// explicitly no recipes for concrete, too thick a material, needs to be grinded back to powder first
void generateCandleFromNeutral() {
[
(Items.BLACK_DYE): Items.BLACK_CANDLE,
(Items.BLUE_DYE): Items.BLUE_CANDLE,
(Items.BROWN_DYE): Items.BROWN_CANDLE,
(Items.CYAN_DYE): Items.CYAN_CANDLE,
(Items.GRAY_DYE): Items.GRAY_CANDLE,
(Items.GREEN_DYE): Items.GREEN_CANDLE,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_CANDLE,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_CANDLE,
(Items.LIME_DYE): Items.LIME_CANDLE,
(Items.MAGENTA_DYE): Items.MAGENTA_CANDLE,
(Items.ORANGE_DYE): Items.ORANGE_CANDLE,
(Items.PINK_DYE): Items.PINK_CANDLE,
(Items.PURPLE_DYE): Items.PURPLE_CANDLE,
(Items.RED_DYE): Items.RED_CANDLE,
(Items.WHITE_DYE): Items.WHITE_CANDLE,
(Items.YELLOW_DYE): Items.YELLOW_CANDLE
].each {dye, candle ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.CANDLE, 2)
output new ItemStack(candle, 2)
source "candle"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
void generateCandle() {
for (ColoredItem color : ColoredItem.values()) {
if (color != ColoredItem.NEUTRAL)
ColoredItem.createExtendedMixingColorStream(color, true, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getCandle(), 2)
output new ItemStack(pair.getRight().getCandle(), 2)
source pair.getLeft().getCandle().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
}
void generateGlassFromNeutral() {
[
(Items.BLACK_DYE): Items.BLACK_STAINED_GLASS,
(Items.BLUE_DYE): Items.BLUE_STAINED_GLASS,
(Items.BROWN_DYE): Items.BROWN_STAINED_GLASS,
(Items.CYAN_DYE): Items.CYAN_STAINED_GLASS,
(Items.GRAY_DYE): Items.GRAY_STAINED_GLASS,
(Items.GREEN_DYE): Items.GREEN_STAINED_GLASS,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_STAINED_GLASS,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_STAINED_GLASS,
(Items.LIME_DYE): Items.LIME_STAINED_GLASS,
(Items.MAGENTA_DYE): Items.MAGENTA_STAINED_GLASS,
(Items.ORANGE_DYE): Items.ORANGE_STAINED_GLASS,
(Items.PINK_DYE): Items.PINK_STAINED_GLASS,
(Items.PURPLE_DYE): Items.PURPLE_STAINED_GLASS,
(Items.RED_DYE): Items.RED_STAINED_GLASS,
(Items.WHITE_DYE): Items.WHITE_STAINED_GLASS,
(Items.YELLOW_DYE): Items.YELLOW_STAINED_GLASS
].each {dye, glass ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.GLASS, 12)
output new ItemStack(glass, 12)
source "glass"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
void generateGlass() {
for (ColoredItem color : ColoredItem.values()) {
if (color != ColoredItem.NEUTRAL)
ColoredItem.createExtendedMixingColorStream(color, true, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getGlass(), 12)
output new ItemStack(pair.getRight().getGlass(), 12)
source pair.getLeft().getGlass().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
}
void generateGlassPaneFromNeutral() {
[
(Items.BLACK_DYE): Items.BLACK_STAINED_GLASS_PANE,
(Items.BLUE_DYE): Items.BLUE_STAINED_GLASS_PANE,
(Items.BROWN_DYE): Items.BROWN_STAINED_GLASS_PANE,
(Items.CYAN_DYE): Items.CYAN_STAINED_GLASS_PANE,
(Items.GRAY_DYE): Items.GRAY_STAINED_GLASS_PANE,
(Items.GREEN_DYE): Items.GREEN_STAINED_GLASS_PANE,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_STAINED_GLASS_PANE,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_STAINED_GLASS_PANE,
(Items.LIME_DYE): Items.LIME_STAINED_GLASS_PANE,
(Items.MAGENTA_DYE): Items.MAGENTA_STAINED_GLASS_PANE,
(Items.ORANGE_DYE): Items.ORANGE_STAINED_GLASS_PANE,
(Items.PINK_DYE): Items.PINK_STAINED_GLASS_PANE,
(Items.PURPLE_DYE): Items.PURPLE_STAINED_GLASS_PANE,
(Items.RED_DYE): Items.RED_STAINED_GLASS_PANE,
(Items.WHITE_DYE): Items.WHITE_STAINED_GLASS_PANE,
(Items.YELLOW_DYE): Items.YELLOW_STAINED_GLASS_PANE
].each {dye, glass_pane ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.GLASS_PANE, 16)
output new ItemStack(glass_pane, 16)
source "glass_pane"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
void generateGlassPane() {
for (ColoredItem color : ColoredItem.values()) {
if (color != ColoredItem.NEUTRAL)
ColoredItem.createExtendedMixingColorStream(color, true, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getGlassPane(), 16)
output new ItemStack(pair.getRight().getGlassPane(), 16)
source pair.getLeft().getGlassPane().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
}
void generateTerracottaFromNeutral() {
[
(Items.BLACK_DYE): Items.BLACK_TERRACOTTA,
(Items.BLUE_DYE): Items.BLUE_TERRACOTTA,
(Items.BROWN_DYE): Items.BROWN_TERRACOTTA,
(Items.CYAN_DYE): Items.CYAN_TERRACOTTA,
(Items.GRAY_DYE): Items.GRAY_TERRACOTTA,
(Items.GREEN_DYE): Items.GREEN_TERRACOTTA,
(Items.LIGHT_BLUE_DYE): Items.LIGHT_BLUE_TERRACOTTA,
(Items.LIGHT_GRAY_DYE): Items.LIGHT_GRAY_TERRACOTTA,
(Items.LIME_DYE): Items.LIME_TERRACOTTA,
(Items.MAGENTA_DYE): Items.MAGENTA_TERRACOTTA,
(Items.ORANGE_DYE): Items.ORANGE_TERRACOTTA,
(Items.PINK_DYE): Items.PINK_TERRACOTTA,
(Items.PURPLE_DYE): Items.PURPLE_TERRACOTTA,
(Items.RED_DYE): Items.RED_TERRACOTTA,
(Items.WHITE_DYE): Items.WHITE_TERRACOTTA,
(Items.YELLOW_DYE): Items.YELLOW_TERRACOTTA
].each {dye, terracotta ->
offerChemicalReactorRecipe {
ingredients dye, new ItemStack(Items.TERRACOTTA, 8)
output new ItemStack(terracotta, 8)
source "terracotta"
power DYE_POWER
time DYE_TIME
criterion getCriterionName(dye), getCriterionConditions(dye)
}
void generateTerracotta() {
for (ColoredItem color : ColoredItem.values()) {
if (color != ColoredItem.NEUTRAL)
ColoredItem.createExtendedMixingColorStream(color, true, true).forEach(pair ->
offerChemicalReactorRecipe {
ingredients color.getDye(), new ItemStack(pair.getLeft().getTerracotta(), 8)
output new ItemStack(pair.getRight().getTerracotta(), 8)
source pair.getLeft().getTerracotta().toString() + "_with_" + color.getDye().toString()
power DYE_POWER
time DYE_TIME
criterion getCriterionName(color.getDye()), getCriterionConditions(color.getDye())
}
)
}
}