Skip to content

feat(fabrication): add new silicon wafer types #1876

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
"item.projectred_fabrication.invalid_die": "Invalid Die",
"item.projectred_fabrication.photomask_set": "Photomask Set",
"item.projectred_fabrication.rough_silicon_wafer": "Rough Silicon Wafer",
"item.projectred_fabrication.purified_silicon_wafer": "Purified Silicon Wafer",
"item.projectred_fabrication.polished_silicon_wafer": "Polished Silicon Wafer",
"item.projectred_fabrication.valid_die": "Valid Die",
"itemGroup.projectred_fabrication": "Project Red: Fabrication",
"projectred_fabrication.compile.stack": "Stack",
Expand Down Expand Up @@ -150,6 +152,9 @@
"projectred_fabrication.ui.single_layer_yield": "Single layer yield",
"projectred_fabrication.ui.wafer_size": "Wafer size",
"projectred_fabrication.ui.wafer_type": "Wafer type",
"projectred_fabrication.ui.wafer_type.rough": "Rough",
"projectred_fabrication.ui.wafer_type.purified": "Purified",
"projectred_fabrication.ui.wafer_type.polished": "Polished",
"projectred_fabrication.ui.yield": "Yield",
"projectred_fabrication.ui.yield_calculator": "Yield Calculator",
"projectred_fabrication.unit.gates": "gates",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "projectred_fabrication:item/polished_silicon_wafer"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "projectred_fabrication:item/purified_silicon_wafer"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"key": {
"c": {
"item": "projectred_core:woven_cloth"
},
"p": {
"item": "projectred_fabrication:purified_silicon_wafer"
}
},
"pattern": [
" c ",
"cpc",
" c "
],
"result": {
"item": "projectred_fabrication:polished_silicon_wafer"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "projectred_fabrication:rough_silicon_wafer"
},
{
"item": "minecraft:water_bucket"
}
],
"result": {
"item": "projectred_fabrication:purified_silicon_wafer"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ protected void registerModels() {
generated(BLANK_PHOTOMASK_ITEM);
generated(PHOTOMASK_SET_ITEM);
generated(ROUGH_SILICON_WAFER_ITEM);
generated(PURIFIED_SILICON_WAFER_ITEM);
generated(POLISHED_SILICON_WAFER_ITEM);
generated(ETCHED_SILICON_WAFER_ITEM);
generated(VALID_DIE_ITEM);
generated(INVALID_DIE_ITEM);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ protected void addTranslations() {
add(BLANK_PHOTOMASK_ITEM.get(), "Blank Photomask");
add(PHOTOMASK_SET_ITEM.get(), "Photomask Set");
add(ROUGH_SILICON_WAFER_ITEM.get(), "Rough Silicon Wafer");
add(PURIFIED_SILICON_WAFER_ITEM.get(), "Purified Silicon Wafer");
add(POLISHED_SILICON_WAFER_ITEM.get(), "Polished Silicon Wafer");
add(ETCHED_SILICON_WAFER_ITEM.get(), "Etched Silicon Wafer");
add(VALID_DIE_ITEM.get(), "Valid Die");
add(INVALID_DIE_ITEM.get(), "Invalid Die");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;

import static mrtjp.projectred.core.init.CoreItems.PLATE_ITEM;
import static mrtjp.projectred.core.init.CoreItems.SILICON_ITEM;
import static mrtjp.projectred.core.init.CoreItems.*;
import static mrtjp.projectred.core.init.CoreTags.ELECTROTINE_ALLOY_INGOT_TAG;
import static mrtjp.projectred.core.init.CoreTags.SAPPHIRE_GEM_TAG;
import static mrtjp.projectred.fabrication.ProjectRedFabrication.MOD_ID;
Expand Down Expand Up @@ -81,5 +80,17 @@ protected void registerRecipes() {

smelting(ROUGH_SILICON_WAFER_ITEM.get())
.ingredient(SILICON_ITEM.get());

shapelessRecipe(PURIFIED_SILICON_WAFER_ITEM.get())
.addIngredient(ROUGH_SILICON_WAFER_ITEM.get())
.addIngredient(Items.WATER_BUCKET);

shapedRecipe(POLISHED_SILICON_WAFER_ITEM.get())
.key('c', WOVEN_CLOTH_ITEM.get())
.key('p', PURIFIED_SILICON_WAFER_ITEM.get())
.enableUnlocking()
.patternLine(" c ")
.patternLine("cpc")
.patternLine(" c ");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,11 @@ public void update() {
case ROUGH_WAFER:
node.setItemStack(new ItemStack(ROUGH_SILICON_WAFER_ITEM.get()));
break;
case POLISHED_WAFER:
case PURIFIED_WAFER:
node.setItemStack(ItemStack.EMPTY); //TODO
node.setItemStack(new ItemStack(PURIFIED_SILICON_WAFER_ITEM.get()));
break;
case POLISHED_WAFER:
node.setItemStack(new ItemStack(POLISHED_SILICON_WAFER_ITEM.get()));
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ private ButtonArrayNode createWaferTypeButtons() {
ButtonArrayNode.Listener listener = new ButtonArrayNode.Listener() {
@Override
public String getButtonText(int index) {
return WaferType.values()[index].getUnlocalizedName();
return Component.translatable(WaferType.values()[index].getLocalizedNameKey()).getString();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public static void register() {
output.accept(BLANK_PHOTOMASK_ITEM.get());
output.accept(PHOTOMASK_SET_ITEM.get());
output.accept(ROUGH_SILICON_WAFER_ITEM.get());
output.accept(PURIFIED_SILICON_WAFER_ITEM.get());
output.accept(POLISHED_SILICON_WAFER_ITEM.get());
output.accept(ETCHED_SILICON_WAFER_ITEM.get());
output.accept(VALID_DIE_ITEM.get());
output.accept(INVALID_DIE_ITEM.get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ public class FabricationItems {
public static final String ID_BLANK_PHOTOMASK = "blank_photomask";
public static final String ID_PHOTOMASK_SET = "photomask_set";
public static final String ID_ROUGH_SILICON_WAFER = "rough_silicon_wafer";
public static final String ID_PURIFIED_SILICON_WAFER = "purified_silicon_wafer";
public static final String ID_POLISHED_SILICON_WAFER = "polished_silicon_wafer";
public static final String ID_ETCHED_SILICON_WAFER = "etched_silicon_wafer";
public static final String ID_VALID_DIE = "valid_die";
public static final String ID_INVALID_DIE = "invalid_die";
Expand All @@ -20,6 +22,8 @@ public class FabricationItems {
public static RegistryObject<BlankPhotomaskItem> BLANK_PHOTOMASK_ITEM;
public static RegistryObject<PhotomaskSetItem> PHOTOMASK_SET_ITEM;
public static RegistryObject<RoughSiliconWaferItem> ROUGH_SILICON_WAFER_ITEM;
public static RegistryObject<PurifiedSiliconWaferItem> PURIFIED_SILICON_WAFER_ITEM;
public static RegistryObject<PolishedSiliconWaferItem> POLISHED_SILICON_WAFER_ITEM;
public static RegistryObject<EtchedSiliconWaferItem> ETCHED_SILICON_WAFER_ITEM;
public static RegistryObject<ValidDieItem> VALID_DIE_ITEM;
public static RegistryObject<InvalidDieItem> INVALID_DIE_ITEM;
Expand All @@ -31,6 +35,8 @@ public static void register() {
BLANK_PHOTOMASK_ITEM = ITEMS.register(ID_BLANK_PHOTOMASK, BlankPhotomaskItem::new);
PHOTOMASK_SET_ITEM = ITEMS.register(ID_PHOTOMASK_SET, PhotomaskSetItem::new);
ROUGH_SILICON_WAFER_ITEM = ITEMS.register(ID_ROUGH_SILICON_WAFER, RoughSiliconWaferItem::new);
PURIFIED_SILICON_WAFER_ITEM = ITEMS.register(ID_PURIFIED_SILICON_WAFER, PurifiedSiliconWaferItem::new);
POLISHED_SILICON_WAFER_ITEM = ITEMS.register(ID_POLISHED_SILICON_WAFER, PolishedSiliconWaferItem::new);
ETCHED_SILICON_WAFER_ITEM = ITEMS.register(ID_ETCHED_SILICON_WAFER, EtchedSiliconWaferItem::new);
VALID_DIE_ITEM = ITEMS.register(ID_VALID_DIE, ValidDieItem::new);
INVALID_DIE_ITEM = ITEMS.register(ID_INVALID_DIE, InvalidDieItem::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,15 +109,18 @@ public class FabricationUnlocal {
public static final String UL_AUTO_COMPILE_DISABLED = PREFIX + "ui.auto_compile_disabled";
public static final String UL_SIM_RUNNING = PREFIX + "ui.sim_running";

public static final String UL_YIELD_CALCULATOR = PREFIX + "ui.yield_calculator";
public static final String UL_LITHOGRAPHY_PIPELINE = PREFIX + "ui.lithography_pipeline";
public static final String UL_PROCESS_NODE = PREFIX + "ui.process_node";
public static final String UL_WAFER_TYPE = PREFIX + "ui.wafer_type";
public static final String UL_DIE_SIZE = PREFIX + "ui.die_size";
public static final String UL_WAFER_SIZE = PREFIX + "ui.wafer_size";
public static final String UL_DIES_PER_WAFER = PREFIX + "ui.dies_per_wafer";
public static final String UL_SINGLE_LAYER_YIELD = PREFIX + "ui.single_layer_yield";
public static final String UL_YIELD = PREFIX + "ui.yield";
public static final String UL_YIELD_CALCULATOR = PREFIX + "ui.yield_calculator";
public static final String UL_LITHOGRAPHY_PIPELINE = PREFIX + "ui.lithography_pipeline";
public static final String UL_PROCESS_NODE = PREFIX + "ui.process_node";
public static final String UL_WAFER_TYPE = PREFIX + "ui.wafer_type";
public static final String UL_WAFER_TYPE_ROUGH = PREFIX + "ui.wafer_type.rough";
public static final String UL_WAFER_TYPE_PURIFIED = PREFIX + "ui.wafer_type.purified";
public static final String UL_WAFER_TYPE_POLISHED = PREFIX + "ui.wafer_type.polished";
public static final String UL_DIE_SIZE = PREFIX + "ui.die_size";
public static final String UL_WAFER_SIZE = PREFIX + "ui.wafer_size";
public static final String UL_DIES_PER_WAFER = PREFIX + "ui.dies_per_wafer";
public static final String UL_SINGLE_LAYER_YIELD = PREFIX + "ui.single_layer_yield";
public static final String UL_YIELD = PREFIX + "ui.yield";

// IC Tiles
public static final String UL_IO_GATE_TILE = PREFIX + "tiles.io_gate";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mrtjp.projectred.fabrication.item;

import mrtjp.projectred.fabrication.lithography.WaferType;

public class PolishedSiliconWaferItem extends BaseSiliconWaferItem {

public PolishedSiliconWaferItem() {
super(WaferType.POLISHED_WAFER);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mrtjp.projectred.fabrication.item;

import mrtjp.projectred.fabrication.lithography.WaferType;

public class PurifiedSiliconWaferItem extends BaseSiliconWaferItem {

public PurifiedSiliconWaferItem() {
super(WaferType.PURIFIED_WAFER);
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
package mrtjp.projectred.fabrication.lithography;

import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*;

public enum WaferType {

//@formatter:off
ROUGH_WAFER (4096, 0.5, "roughWafer"),
PURIFIED_WAFER (4096, 0.1, "purifiedWafer"),
POLISHED_WAFER (4096, 0.01, "polishedWafer");
ROUGH_WAFER (4096, 0.5, UL_WAFER_TYPE_ROUGH),
PURIFIED_WAFER (4096, 0.1, UL_WAFER_TYPE_PURIFIED),
POLISHED_WAFER (4096, 0.01, UL_WAFER_TYPE_POLISHED);
//@formatter:on

private final String unlocalizedName;
private final int waferLen;
private final int waferArea;
private final String localizedNameKey;
private final int waferLen;
private final int waferArea;
private final double defectRatePerUnitArea;

// Note: standard die defect rate is rate of defect of 16x16 design in 64nm process
WaferType(int waferLen, double standardDieDefectRate, String unlocalizedName) {
WaferType(int waferLen, double standardDieDefectRate, String localizedNameKey) {
this.waferLen = waferLen;
this.waferArea = waferLen * waferLen; // square wafers only atm

// back-calculate standard die defect rate to defect per unit area
this.defectRatePerUnitArea = standardDieDefectRate / (Math.pow(64 * 16, 2));

this.unlocalizedName = unlocalizedName;
this.localizedNameKey = localizedNameKey;
}

public int getWaferArea() {
Expand All @@ -40,7 +42,7 @@ public double getDefectRatePerUnitArea() {
return defectRatePerUnitArea;
}

public String getUnlocalizedName() {
return unlocalizedName;
public String getLocalizedNameKey() {
return this.localizedNameKey;
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.