Skip to content
Merged
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
6 changes: 3 additions & 3 deletions docs/ADDING_MACHINES.md
Original file line number Diff line number Diff line change
Expand Up @@ -327,12 +327,12 @@ remember that the top, side and bottom textures of a casing must be `modern_indu
For example:
```js
MIMachineEvents.registerCasings(event => {
// Register two casings.
// Register a casing.
// This doesn't register any model! Either add models or add the top/side/bottom textures.
event.register("my_fancy_casing", "my_other_casing");
event.registerNamed("fancy_casing", "Fancy");

// This registers a new casing with the same model as a diamond block!
event.registerBlockImitation("my_diamond_casing", "minecraft:diamond_block");
event.registerBlockImitation("diamond_casing", "minecraft:diamond_block");
})
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,8 @@
import aztech.modern_industrialization.machines.models.MachineBakedModel;
import aztech.modern_industrialization.machines.models.MachineCasing;
import aztech.modern_industrialization.machines.models.MachineCasings;
import aztech.modern_industrialization.materials.MIMaterials;
import aztech.modern_industrialization.materials.part.MIParts;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.neoforged.neoforge.client.model.generators.BlockModelBuilder;
import net.neoforged.neoforge.client.model.generators.ModelProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
Expand All @@ -48,49 +42,35 @@ public MachineCasingsProvider(PackOutput output, ExistingFileHelper existingFile

@Override
protected void registerModels() {
for (var casing : MachineCasings.registeredCasings.values()) {
if (casing.imitatedBlock != null) {
imitateBlock(casing, casing.imitatedBlock.get());
}
}

imitateBlock(CableTier.LV.casing, MIBlock.BASIC_MACHINE_HULL.asBlock());
imitateBlock(CableTier.MV.casing, MIBlock.ADVANCED_MACHINE_HULL.asBlock());
imitateBlock(CableTier.HV.casing, MIBlock.TURBO_MACHINE_HULL.asBlock());
imitateBlock(CableTier.EV.casing, MIBlock.HIGHLY_ADVANCED_MACHINE_HULL.asBlock());
imitateBlock(CableTier.SUPERCONDUCTOR.casing, MIBlock.QUANTUM_MACHINE_HULL.asBlock());

imitateBlock(MachineCasings.FIREBRICKS, MIBlock.BLOCK_FIRE_CLAY_BRICKS.asBlock());
imitateBlock(MachineCasings.BRICKS, Blocks.BRICKS);

imitateBlock(MachineCasings.BRONZE, MIMaterials.BRONZE.getPart(MIParts.MACHINE_CASING).asBlock());
imitateBlock(MachineCasings.BRONZE_PLATED_BRICKS, MIMaterials.BRONZE.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.CLEAN_STAINLESS_STEEL, MIMaterials.STAINLESS_STEEL.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.FROSTPROOF, MIMaterials.ALUMINUM.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.HEATPROOF, MIMaterials.INVAR.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.STAINLESS_STEEL_PIPE, MIMaterials.STAINLESS_STEEL.getPart(MIParts.MACHINE_CASING_PIPE).asBlock());
imitateBlock(MachineCasings.STEEL, MIMaterials.STEEL.getPart(MIParts.MACHINE_CASING).asBlock());
imitateBlock(MachineCasings.TITANIUM, MIMaterials.TITANIUM.getPart(MIParts.MACHINE_CASING).asBlock());
imitateBlock(MachineCasings.TITANIUM_PIPE, MIMaterials.TITANIUM.getPart(MIParts.MACHINE_CASING_PIPE).asBlock());
imitateBlock(MachineCasings.SOLID_TITANIUM, MIMaterials.TITANIUM.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.NUCLEAR, MIMaterials.NUCLEAR_ALLOY.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());
imitateBlock(MachineCasings.PLASMA_HANDLING_IRIDIUM, MIMaterials.IRIDIUM.getPart(MIParts.MACHINE_CASING_SPECIAL).asBlock());

cubeBottomTop(MachineCasings.BRICKED_BRONZE, "block/casings/bricked_bronze", "block/fire_clay_bricks", "block/bronze_machine_casing");
cubeBottomTop(MachineCasings.BRICKED_STEEL, "block/casings/bricked_steel", "block/fire_clay_bricks", "block/steel_machine_casing");
cubeAll(MachineCasings.CONFIGURABLE_TANK, "block/casings/configurable_tank");
cubeAll(MachineCasings.STEEL_CRATE, "block/casings/steel_crate");

for (var entry : MachineCasingImitations.imitationsToGenerate.entrySet()) {
imitateBlock(entry.getKey(), BuiltInRegistries.BLOCK.getOrThrow(ResourceKey.create(Registries.BLOCK, entry.getValue())));
}
}

private void imitateBlock(MachineCasing casing, Block block) {
getBuilder(casing.name)
getBuilder(casing.key.toString())
.customLoader((bmb, existingFileHelper) -> new UseBlockModelModelBuilder<>(block, bmb, existingFileHelper));
}

private void cubeBottomTop(MachineCasing casing, String side, String bottom, String top) {
cubeBottomTop(casing.name, MI.id(side), MI.id(bottom), MI.id(top));
cubeBottomTop(casing.key.toString(), MI.id(side), MI.id(bottom), MI.id(top));
}

private void cubeAll(MachineCasing casing, String side) {
cubeAll(casing.name, MI.id(side));
cubeAll(casing.key.toString(), MI.id(side));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
*/
package aztech.modern_industrialization.machines.models;

import aztech.modern_industrialization.MI;
import aztech.modern_industrialization.util.ModelHelper;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -57,7 +56,7 @@ public class MachineBakedModel implements IDynamicBakedModel {
public static final String CASING_FOLDER = "machine_casing";

public static ModelResourceLocation getCasingModelId(MachineCasing casing) {
return ModelResourceLocation.standalone(MI.id(CASING_FOLDER + "/" + casing.name));
return ModelResourceLocation.standalone(casing.key.withPath(p -> CASING_FOLDER + "/" + p));
}

public static BakedModel getCasingModel(MachineCasing casing) {
Expand All @@ -66,12 +65,12 @@ public static BakedModel getCasingModel(MachineCasing casing) {

private final MachineCasing baseCasing;
private final TextureAtlasSprite[] defaultOverlays;
private final Map<String, TextureAtlasSprite[]> tieredOverlays;
private final Map<MachineCasing, TextureAtlasSprite[]> tieredOverlays;
private final MachineModelClientData defaultData;

MachineBakedModel(MachineCasing baseCasing,
TextureAtlasSprite[] defaultOverlays,
Map<String, TextureAtlasSprite[]> tieredOverlays) {
Map<MachineCasing, TextureAtlasSprite[]> tieredOverlays) {
this.baseCasing = baseCasing;
this.defaultOverlays = defaultOverlays;
this.tieredOverlays = tieredOverlays;
Expand All @@ -86,7 +85,7 @@ public TextureAtlasSprite[] getSprites(@Nullable MachineCasing casing) {
if (casing == null) {
return defaultOverlays;
}
return tieredOverlays.getOrDefault(casing.name, defaultOverlays);
return tieredOverlays.getOrDefault(casing, defaultOverlays);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public class MachineUnbakedModel implements IUnbakedGeometry<MachineUnbakedModel

private final MachineCasing baseCasing;
private final Material[] defaultOverlays;
private final Map<String, Material[]> tieredOverlays = new HashMap<>();
private final Map<MachineCasing, Material[]> tieredOverlays = new HashMap<>();

private MachineUnbakedModel(JsonObject obj) {
this.baseCasing = MachineCasings.get(GsonHelper.getAsString(obj, "casing"));
Expand All @@ -65,15 +65,15 @@ private MachineUnbakedModel(JsonObject obj) {
var tieredOverlays = GsonHelper.getAsJsonObject(obj, "tiered_overlays", new JsonObject());
for (var casingTier : tieredOverlays.keySet()) {
var casingOverlaysJson = OverlaysJson.parse(GsonHelper.getAsJsonObject(tieredOverlays, casingTier), defaultOverlaysJson);
this.tieredOverlays.put(casingTier, casingOverlaysJson.toSpriteIds());
this.tieredOverlays.put(MachineCasings.get(casingTier), casingOverlaysJson.toSpriteIds());
}
}

@Override
public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function<Material, TextureAtlasSprite> spriteGetter,
ModelState modelState, ItemOverrides overrides) {
var defaultOverlays = loadSprites(spriteGetter, this.defaultOverlays);
var tieredOverlays = new HashMap<String, TextureAtlasSprite[]>();
var tieredOverlays = new HashMap<MachineCasing, TextureAtlasSprite[]>();
for (var entry : this.tieredOverlays.entrySet()) {
tieredOverlays.put(entry.getKey(), loadSprites(spriteGetter, entry.getValue()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ public static void casingFromTextureBricked(TextureManager tm, MachineCasing cas
copy.setPixelRGBA(i, j, brickTexture.getPixelRGBA(i, j));
}
}
String s = String.format("modern_industrialization:textures/block/casings/%s.png", casing.name);
String s = String.format("%s:textures/block/casings/%s.png", casing.key.getNamespace(), casing.key.getPath());
tm.addTexture(s, copy);
}
} catch (IOException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,15 @@
"key.categories.modern_industrialization.modern_industrialization": "Modern Industrialization",
"key.modern_industrialization.toggle_3x3": "Toggle 3x3 Mining",
"key.modern_industrialization.toggle_flight": "Toggle Flight",
"machine_casing.modern_industrialization.bricked_bronze": "Bricked Bronze",
"machine_casing.modern_industrialization.bricked_steel": "Bricked Steel",
"machine_casing.modern_industrialization.configurable_tank": "Configurable Tank",
"machine_casing.modern_industrialization.ev": "EV",
"machine_casing.modern_industrialization.hv": "HV",
"machine_casing.modern_industrialization.lv": "LV",
"machine_casing.modern_industrialization.mv": "MV",
"machine_casing.modern_industrialization.steel_crate": "Steel Crate",
"machine_casing.modern_industrialization.superconductor": "Superconductor",
"rei_categories.modern_industrialization.assembler": "Assembler",
"rei_categories.modern_industrialization.bronze_compressor": "Compressor",
"rei_categories.modern_industrialization.bronze_cutting_machine": "Cutting Machine",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
*/
package aztech.modern_industrialization.api.energy;

import aztech.modern_industrialization.MI;
import aztech.modern_industrialization.MIBlockKeys;
import aztech.modern_industrialization.compat.kubejs.KubeJSProxy;
import aztech.modern_industrialization.machines.models.MachineCasing;
Expand Down Expand Up @@ -83,7 +84,7 @@ public CableTier(String name, String shortEnglishName, String longEnglishName, l
this.longEnglishName = longEnglishName;
this.eu = eu;
this.itemKey = itemKey;
this.casing = MachineCasings.create(name);
this.casing = MachineCasings.create(MI.id(name), shortEnglishName);
this.builtin = builtin;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,31 @@
*/
package aztech.modern_industrialization.compat.kubejs.machine;

import aztech.modern_industrialization.datagen.model.MachineCasingImitations;
import aztech.modern_industrialization.MI;
import aztech.modern_industrialization.machines.models.MachineCasings;
import dev.latvian.mods.kubejs.event.KubeEvent;
import java.util.Objects;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RegisterCasingsEventJS implements KubeEvent {
private static final Logger LOGGER = LoggerFactory.getLogger(RegisterCasingsEventJS.class);

@Deprecated
public void register(String... names) {
LOGGER.warn("register is deprecated, use registerNamed instead");
for (var name : names) {
if (name.contains(":")) {
throw new IllegalArgumentException("Casing name cannot contain ':'.");
}
registerNamed(name, null);
}
}

MachineCasings.create(name);
public void registerNamed(String name, String englishName) {
if (name.contains(":")) {
throw new IllegalArgumentException("Casing name cannot contain ':'.");
}
MachineCasings.create(MI.id(name), englishName);
}

public void registerBlockImitation(String name, ResourceLocation block) {
Expand All @@ -46,6 +56,6 @@ public void registerBlockImitation(String name, ResourceLocation block) {
throw new IllegalArgumentException("Casing name cannot contain ':'.");
}

MachineCasingImitations.imitationsToGenerate.put(MachineCasings.create(name), block);
MachineCasings.createBlockImitation(MI.id(name), () -> BuiltInRegistries.BLOCK.get(block));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static void register(String machine, MachineCasing defaultCasing, String

record MachineModelProperties(MachineCasing defaultCasing, String overlay, boolean front, boolean top, boolean side, boolean active) {
void addToMachineJson(JsonObject obj) {
obj.addProperty("casing", defaultCasing.name);
obj.addProperty("casing", defaultCasing.key.getPath());

var defaultOverlays = new JsonObject();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import aztech.modern_industrialization.datagen.tag.TagsToGenerate;
import aztech.modern_industrialization.definition.Definition;
import aztech.modern_industrialization.machines.blockentities.multiblocks.ElectricBlastFurnaceBlockEntity;
import aztech.modern_industrialization.machines.models.MachineCasings;
import com.google.common.hash.Hashing;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
Expand Down Expand Up @@ -132,6 +133,10 @@ private void collectTranslationEntries() {
addTranslation(cableTier.shortEnglishKey(), cableTier.shortEnglishName);
addTranslation(cableTier.longEnglishKey(), cableTier.longEnglishName);
}

for (var casingName : MachineCasings.translations) {
addTranslation(casingName.casing().getTranslationKey(), casingName.englishName());
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,39 @@
*/
package aztech.modern_industrialization.machines.models;

import java.util.function.Supplier;
import net.minecraft.Util;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;

public class MachineCasing {
public final String name;
public final ResourceLocation key;
/**
* Not null when registered as an imitation. The actual model might not be an imitation since it is resource pack driven.
* Mostly used to pull the name of the casing from the block it imitates. Will also generate a corresponding casing model.
*/
@Nullable
public final Supplier<? extends Block> imitatedBlock;

MachineCasing(ResourceLocation key, @Nullable Supplier<? extends Block> imitatedBlock) {
this.key = key;
this.imitatedBlock = imitatedBlock;
}

public String getTranslationKey() {
if (imitatedBlock != null) {
throw new IllegalArgumentException("Cannot get translation key for casing imitating a block.");
}
return Util.makeDescriptionId("machine_casing", key);
}

MachineCasing(String name) {
this.name = name;
public MutableComponent getName() {
if (imitatedBlock != null) {
return imitatedBlock.get().getName();
}
return Component.translatable(getTranslationKey());
}
}
Loading
Loading