Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
006c3f9
Rough and broken, barebones implementation
TwistedGate Aug 22, 2022
5386fc5
Mild Cleanup
TwistedGate Aug 22, 2022
9b566ef
Fix recursion problem
TwistedGate Aug 23, 2022
2943098
Crouching rotates by 90°
TwistedGate Aug 24, 2022
db09595
Cache voxel shapes
TwistedGate Aug 24, 2022
67e2acf
Fixed faulty Screwdriver and Cutter checks for external content
TwistedGate Sep 12, 2022
59ec8d5
Bump IE to `1.18.2-8.4.0-161`
TwistedGate Jun 14, 2023
d8e5b4b
Bump Forge `40.1.48`
TwistedGate Jun 14, 2023
1a01e1a
This is such a mess.
TwistedGate Jun 14, 2023
5d67ca5
Rough and broken, barebones implementation
TwistedGate Aug 22, 2022
8848ff6
Mild Cleanup
TwistedGate Aug 22, 2022
04b193d
Fix recursion problem
TwistedGate Aug 23, 2022
17ab02b
Crouching rotates by 90°
TwistedGate Aug 24, 2022
8fdcc53
Cache voxel shapes
TwistedGate Aug 24, 2022
376fa87
Fixed faulty Screwdriver and Cutter checks for external content
TwistedGate Sep 12, 2022
0af5e39
Bump IE to `1.18.2-8.4.0-161`
TwistedGate Jun 14, 2023
21c4cbd
Bump Forge `40.1.48`
TwistedGate Jun 14, 2023
c97ee5d
This is such a mess.
TwistedGate Jun 14, 2023
3370ddb
Merge branch 'feature/busbar' of github.com:TwistedGate/OverEngineered
TwistedGate Oct 22, 2023
d069a6f
Bump Forge to `40.2.4`
TwistedGate Dec 10, 2023
f481c91
Remove redundant TE-Base
TwistedGate Dec 10, 2023
92eb39e
Always use latest of JEI `9.7.1`
TwistedGate Dec 10, 2023
916b342
Switching to BlockEntityRenderer
TwistedGate Dec 25, 2023
3b4b424
Switched Color
TwistedGate Dec 25, 2023
e2cc54e
Moved origin to "center" of busbar models
TwistedGate Dec 25, 2023
ea7e37f
Models are now correctly rotated
TwistedGate Dec 26, 2023
cef9fac
Fixing broken bounding-boxes
TwistedGate Dec 26, 2023
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
5 changes: 3 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,9 @@ minecraft{

data{
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.logging.markers', ''
property 'forge.logging.console.level', 'info'
property 'fml.earlyprogresswindow', 'false'
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"

Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

version_minecraft=1.18.2
version_forge=40.1.48
version_forge=40.2.4
version_fml_mappings=1.18.2
version_parchment=1.18.1-2022.03.06-1.18.2
version_ie=1.18.2-8.1.0-150
version_ie=1.18.2-8.4.0-161

version_jei=9.7.0.195
version_jei=9.7.1.+
version_ct=9.1.156
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
package twistedgate.overengineered.common.data;

import java.util.function.Function;

import javax.annotation.Nullable;

import net.minecraft.data.DataGenerator;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.client.model.generators.BlockModelBuilder;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.client.model.generators.ConfiguredModel;
import net.minecraftforge.client.model.generators.VariantBlockStateBuilder;
import net.minecraftforge.client.model.generators.VariantBlockStateBuilder.PartialBlockstate;
import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder;
import net.minecraftforge.common.data.ExistingFileHelper;
import twistedgate.overengineered.OverEngineered;
import twistedgate.overengineered.common.OEContent;
import twistedgate.overengineered.common.blocks.busbar.BusbarBlock;
import twistedgate.overengineered.utils.enums.EnumBusbarShape;

public class OEBlockStates extends BlockStateProvider{
final ExistingFileHelper exFileHelper;
Expand All @@ -18,8 +26,90 @@ public OEBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper){
this.exFileHelper = exFileHelper;
}

private ConfiguredModel emptyModel;

@Override
protected void registerStatesAndModels(){
makeEmpty();

busbar();
}

private void busbar(){
PartialBlockstate state = getVariantBuilder(OEContent.Blocks.BUSBAR.get()).partialState();

EnumBusbarShape[] shapes = EnumBusbarShape.values();
for(EnumBusbarShape shape:shapes){
state.with(BusbarBlock.SHAPE, shape).setModels(this.emptyModel);
}
}

private void makeEmpty(){
BlockModelBuilder empty = models().getBuilder("empty");
this.emptyModel = new ConfiguredModel(empty, 0, 0, false);
}

/** Keeping it just incase i need something from it */
@SuppressWarnings("unused")
private final void old(){

// Insulators
BlockModelBuilder model_insulators_normal = busModel("models/block/busbar/obj/busbar_a.obj", "_with_insulators");
BlockModelBuilder model_insulators_rotated = busModel("models/block/busbar/obj/busbar_a_alt.obj", "_with_insulators_pre_y_rotated");

BlockModelBuilder model_bend = busModel("models/block/busbar/obj/busbar_bend.obj", "_bend");
BlockModelBuilder model_edge_inside = busModel("models/block/busbar/obj/busbar_edge_inside.obj", "_horizontal_up");
BlockModelBuilder model_edge_outside = busModel("models/block/busbar/obj/busbar_edge_outside.obj", "_horizontal_down");

model_insulators_normal.assertExistence();
model_insulators_rotated.assertExistence();

model_bend.assertExistence();
model_edge_inside.assertExistence();
model_edge_outside.assertExistence();

bus(EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH, model_insulators_normal, 0, 0);
bus(EnumBusbarShape.INSULATORS_DOWN_EAST_WEST, model_insulators_normal, 0, 90);
bus(EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH, model_insulators_normal, 180, 0);
bus(EnumBusbarShape.INSULATORS_UP_EAST_WEST, model_insulators_normal, 180, 90);

EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_insulators_normal, -90, 90 * i));
EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_insulators_rotated, -90, 90 * i));

EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i));
EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i));

// TODO These do not have the correct rotations
EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i));

EnumBusbarShape.Type.EDGE_INSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 0, 90 * i));
EnumBusbarShape.Type.EDGE_INSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 180, 90 * i));
EnumBusbarShape.Type.EDGE_OUTSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 0, 90 * i));
EnumBusbarShape.Type.EDGE_OUTSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 180, 90 * i));
}

private PartialBlockstate bus(EnumBusbarShape shape, BlockModelBuilder model, int x_rot, int y_rot){
PartialBlockstate state = getVariantBuilder(OEContent.Blocks.BUSBAR.get()).partialState();

return state.with(BusbarBlock.SHAPE, shape)
.addModels(new ConfiguredModel(model, x_rot % 360, y_rot % 360, false));
}

// Could still be used for specific stuff
@SuppressWarnings("unused")
private PartialBlockstate bus(Function<PartialBlockstate, PartialBlockstate> f, BlockModelBuilder model, int x_rot, int y_rot){
VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get());
return f.apply(builder.partialState()).addModels(new ConfiguredModel(model, x_rot, y_rot, false));
}

@SuppressWarnings("unused")
@Deprecated(forRemoval = true)
private PartialBlockstate bus(PartialBlockstate state, BlockModelBuilder m0, BlockModelBuilder m1, boolean floating, int x_rot, int y_rot){
return state.addModels(new ConfiguredModel(floating ? m1 : m0, x_rot, y_rot, false));
}

private BlockModelBuilder busModel(String modelPath, @Nullable String postFix){
return objModel(OEContent.Blocks.BUSBAR.get(), modelPath, postFix, modLoc("block/busbar/obj"));
}

private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String postFix, ResourceLocation texture){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,27 @@
import net.minecraftforge.common.data.ExistingFileHelper;
import twistedgate.overengineered.OverEngineered;


public class OEItemModels extends ItemModelProvider{
public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper){
super(generator, OverEngineered.MODID, existingFileHelper);
}

@Override
protected void registerModels(){
// ModelBuilder<?>.TransformsBuilder trans = model.transforms();
// doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F);
// doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F);
// doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, null, null, 1.0F);
// doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, null, null, 1.0F);
// doTransform(trans, TransformType.HEAD, new Vector3f(0, 0, 0), null, 1.0F);
// doTransform(trans, TransformType.GUI, new Vector3f(0, 2, 0), new Vector3f(30, 45, 0), 0.75F);
// doTransform(trans, TransformType.GROUND, new Vector3f(0, 0, 0), null, 1.0F);
// doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F);
ItemModelBuilder model = withExistingParent("busbar", "overengineered:block/busbar/json/busbar_straight");

// ItemModelBuilder model = obj(OEContent.Blocks.BUSBAR.get(), "block/busbar/obj/busbar_a.obj")
// .texture("texture", modLoc("block/obj/busbar"));

ModelBuilder<?>.TransformsBuilder trans = model.transforms();
doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F);
doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F);
doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, null, null, 1.0F);
doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, null, null, 1.0F);
doTransform(trans, TransformType.HEAD, new Vector3f(0, 0, 0), null, 1.0F);
doTransform(trans, TransformType.GUI, new Vector3f(0, 2, 0), new Vector3f(30, 45, 0), 0.75F);
doTransform(trans, TransformType.GROUND, new Vector3f(0, 0, 0), null, 1.0F);
doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F);
}

private void doTransform(ModelBuilder<?>.TransformsBuilder transform, TransformType type, @Nullable Vector3f translation, @Nullable Vector3f rotationAngle, float scale){
Expand All @@ -43,6 +47,7 @@ private void doTransform(ModelBuilder<?>.TransformsBuilder transform, TransformT
trans.end();
}

@SuppressWarnings("unused")
private ItemModelBuilder obj(ItemLike item, String model){
return getBuilder(item.asItem().getRegistryName().toString())
.customLoader(OBJLoaderBuilder::begin)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,73 @@
package twistedgate.overengineered.common.data;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;

import blusunrize.immersiveengineering.api.wires.WireType;
import blusunrize.immersiveengineering.common.blocks.metal.BasicConnectorBlock;
import blusunrize.immersiveengineering.common.register.IEBlocks;
import blusunrize.immersiveengineering.common.register.IEBlocks.BlockEntry;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.ItemLike;
import twistedgate.overengineered.common.OEContent;
import twistedgate.overengineered.utils.ResourceUtils;

public class OERecipes extends RecipeProvider{
private final Map<String, Integer> PATH_COUNT = new HashMap<>();

public OERecipes(DataGenerator pGenerator){
super(pGenerator);
}

@Override
protected void buildCraftingRecipes(Consumer<FinishedRecipe> out){
BlockEntry<BasicConnectorBlock<?>> lv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.LV_CATEGORY, true);
BlockEntry<BasicConnectorBlock<?>> mv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.MV_CATEGORY, true);

ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3)
.group("oe_busbar")
.pattern("CCC")
.pattern("LRM")
.define('C', Items.COPPER_INGOT)
.define('R', Items.RED_DYE)
.define('L', lv_relay)
.define('M', mv_relay)
.unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT))
.unlockedBy("has_" + toPath(lv_relay), has(lv_relay))
.unlockedBy("has_" + toPath(mv_relay), has(mv_relay))
.save(out, rl("busbar"));

ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3)
.group("oe_busbar")
.pattern("CCC")
.pattern("MRL")
.define('C', Items.COPPER_INGOT)
.define('R', Items.RED_DYE)
.define('L', lv_relay)
.define('M', mv_relay)
.unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT))
.unlockedBy("has_" + toPath(lv_relay), has(lv_relay))
.unlockedBy("has_" + toPath(mv_relay), has(mv_relay))
.save(out, rl("busbar"));
}

private ResourceLocation rl(String str){
if(PATH_COUNT.containsKey(str)){
int count = PATH_COUNT.get(str) + 1;
PATH_COUNT.put(str, count);
return ResourceUtils.oe(str + count);
}
PATH_COUNT.put(str, 1);
return ResourceUtils.oe(str);
}

private String toPath(ItemLike src){
return src.asItem().getRegistryName().getPath();
}
}
7 changes: 7 additions & 0 deletions src/generated/resources/.cache/cache
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
e47a0ffe7cb343f0d6d80203f410a3769cd0204c assets/overengineered/blockstates/busbar.json
9ed931619e39f59a8520c1e3b03fea2e9a56fb60 assets/overengineered/models/block/empty.json
6bb4790efda3e3868669888d11756508e65f6ba7 assets/overengineered/models/item/busbar.json
f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json
84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json
9d6eee99845fd97468aa2085f9f4daa638d8cd7c data/overengineered/recipes/busbar.json
5fe8d5a4a47d15ce3dcc66fce0524cfca955107e data/overengineered/recipes/busbar2.json
Loading