Skip to content

Commit 4a84d96

Browse files
committed
add blockstates for PrismaticActiveBlock
1 parent f6b5797 commit 4a84d96

File tree

58 files changed

+322
-28
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+322
-28
lines changed

src/generated/resources/assets/monilabs/blockstates/casings/prismatic_casing.json

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,41 @@
33
"active=false": {
44
"model": "monilabs:block/casings/prismatic_casing"
55
},
6-
"active=true": {
7-
"model": "monilabs:block/casings/prismatic_casing_active"
6+
"active=true,color=0": {
7+
"model": "monilabs:block/casings/prismatic_casing_active_red"
8+
},
9+
"active=true,color=1": {
10+
"model": "monilabs:block/casings/prismatic_casing_active_orange"
11+
},
12+
"active=true,color=10": {
13+
"model": "monilabs:block/casings/prismatic_casing_active_magenta"
14+
},
15+
"active=true,color=11": {
16+
"model": "monilabs:block/casings/prismatic_casing_active_pink"
17+
},
18+
"active=true,color=2": {
19+
"model": "monilabs:block/casings/prismatic_casing_active_yellow"
20+
},
21+
"active=true,color=3": {
22+
"model": "monilabs:block/casings/prismatic_casing_active_lime"
23+
},
24+
"active=true,color=4": {
25+
"model": "monilabs:block/casings/prismatic_casing_active_green"
26+
},
27+
"active=true,color=5": {
28+
"model": "monilabs:block/casings/prismatic_casing_active_teal"
29+
},
30+
"active=true,color=6": {
31+
"model": "monilabs:block/casings/prismatic_casing_active_cyan"
32+
},
33+
"active=true,color=7": {
34+
"model": "monilabs:block/casings/prismatic_casing_active_azure"
35+
},
36+
"active=true,color=8": {
37+
"model": "monilabs:block/casings/prismatic_casing_active_blue"
38+
},
39+
"active=true,color=9": {
40+
"model": "monilabs:block/casings/prismatic_casing_active_indigo"
841
}
942
}
1043
}

src/generated/resources/assets/monilabs/blockstates/prismatic_focus.json

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,41 @@
33
"active=false": {
44
"model": "monilabs:block/prismatic_focus"
55
},
6-
"active=true": {
7-
"model": "monilabs:block/prismatic_focus_active"
6+
"active=true,color=0": {
7+
"model": "monilabs:block/prismatic_focus_active_red"
8+
},
9+
"active=true,color=1": {
10+
"model": "monilabs:block/prismatic_focus_active_orange"
11+
},
12+
"active=true,color=10": {
13+
"model": "monilabs:block/prismatic_focus_active_magenta"
14+
},
15+
"active=true,color=11": {
16+
"model": "monilabs:block/prismatic_focus_active_pink"
17+
},
18+
"active=true,color=2": {
19+
"model": "monilabs:block/prismatic_focus_active_yellow"
20+
},
21+
"active=true,color=3": {
22+
"model": "monilabs:block/prismatic_focus_active_lime"
23+
},
24+
"active=true,color=4": {
25+
"model": "monilabs:block/prismatic_focus_active_green"
26+
},
27+
"active=true,color=5": {
28+
"model": "monilabs:block/prismatic_focus_active_teal"
29+
},
30+
"active=true,color=6": {
31+
"model": "monilabs:block/prismatic_focus_active_cyan"
32+
},
33+
"active=true,color=7": {
34+
"model": "monilabs:block/prismatic_focus_active_azure"
35+
},
36+
"active=true,color=8": {
37+
"model": "monilabs:block/prismatic_focus_active_blue"
38+
},
39+
"active=true,color=9": {
40+
"model": "monilabs:block/prismatic_focus_active_indigo"
841
}
942
}
1043
}

src/main/java/net/neganote/monilabs/common/machine/multiblock/PrismaticCrucibleMachine.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,19 @@ public void onStructureInvalid() {
6262
public void onStructureFormed() {
6363
super.onStructureFormed();
6464

65-
for (Long longPos : Objects.requireNonNull(getActiveBlocks())) {
66-
if (Objects.requireNonNull(getLevel()).getBlockState(BlockPos.of(longPos))
67-
.getBlock() instanceof PrismaticActiveBlock) {
68-
BlockPos controllerPos = getPos();
69-
BlockPos corePos = BlockPos.of(longPos);
70-
71-
float xDiff = (float) (corePos.getX() - controllerPos.getX()) + 0.5f;
72-
float yDiff = (float) (corePos.getY() - controllerPos.getY()) + 0.5f;
73-
float zDiff = (float) (corePos.getZ() - controllerPos.getZ()) + 0.5f;
74-
this.renderOffset = new float[] { xDiff, yDiff, zDiff };
75-
break;
76-
}
77-
}
65+
// for (Long longPos : Objects.requireNonNull(getActiveBlocks())) {
66+
// if (Objects.requireNonNull(getLevel()).getBlockState(BlockPos.of(longPos))
67+
// .getBlock() instanceof PrismaticActiveBlock) {
68+
// BlockPos controllerPos = getPos();
69+
// BlockPos corePos = BlockPos.of(longPos);
70+
//
71+
// float xDiff = (float) (corePos.getX() - controllerPos.getX()) + 0.5f;
72+
// float yDiff = (float) (corePos.getY() - controllerPos.getY()) + 0.5f;
73+
// float zDiff = (float) (corePos.getZ() - controllerPos.getZ()) + 0.5f;
74+
// this.renderOffset = new float[] { xDiff, yDiff, zDiff };
75+
// break;
76+
// }
77+
// }
7878
}
7979

8080
@Override
@@ -124,6 +124,28 @@ private void changeColorState(Color newColor) {
124124
color = newColor;
125125
this.notifiableChromaContainer.setColor(newColor);
126126
updateSignal();
127+
updateColoredActiveBlocks();
128+
}
129+
130+
public void updateColoredActiveBlocks() {
131+
if (activeBlocks != null) {
132+
for (Long pos : activeBlocks) {
133+
var blockPos = BlockPos.of(pos);
134+
var blockState = Objects.requireNonNull(getLevel()).getBlockState(blockPos);
135+
if (blockState.getBlock() instanceof PrismaticActiveBlock block) {
136+
var newState = block.changeColor(blockState, color.key);
137+
if (newState != blockState) {
138+
getLevel().setBlockAndUpdate(blockPos, newState);
139+
}
140+
}
141+
}
142+
}
143+
}
144+
145+
@Override
146+
public void updateActiveBlocks(boolean active) {
147+
super.updateActiveBlocks(active);
148+
updateColoredActiveBlocks();
127149
}
128150

129151
public Color getColorState() {

src/main/java/net/neganote/monilabs/common/machine/part/PrismaticActiveBlock.java

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,98 @@
44

55
import net.minecraft.resources.ResourceLocation;
66
import net.minecraft.world.level.block.Block;
7+
import net.minecraft.world.level.block.state.BlockState;
8+
import net.minecraft.world.level.block.state.StateDefinition;
9+
import net.minecraft.world.level.block.state.properties.IntegerProperty;
710
import net.minecraftforge.client.model.generators.ModelFile;
11+
import net.neganote.monilabs.common.machine.multiblock.PrismaticCrucibleMachine;
812

913
import com.tterrag.registrate.providers.DataGenContext;
1014
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
1115
import com.tterrag.registrate.util.nullness.NonNullBiConsumer;
16+
import org.jetbrains.annotations.NotNull;
1217

13-
// Despite the name, this only exists for the multi to attach a renderer to it.
1418
public class PrismaticActiveBlock extends ActiveBlock {
1519

20+
public static final IntegerProperty COLOR = IntegerProperty.create("color", 0, 11);
21+
1622
public PrismaticActiveBlock(Properties properties) {
1723
super(properties);
24+
registerDefaultState(defaultBlockState().setValue(COLOR, 0));
25+
}
26+
27+
@Override
28+
protected void createBlockStateDefinition(StateDefinition.@NotNull Builder<Block, BlockState> builder) {
29+
super.createBlockStateDefinition(builder);
30+
builder.add(COLOR);
1831
}
1932

20-
public static NonNullBiConsumer<DataGenContext<Block, PrismaticActiveBlock>, RegistrateBlockstateProvider> createActiveModel(ResourceLocation modelPath) {
33+
public static NonNullBiConsumer<DataGenContext<Block, PrismaticActiveBlock>, RegistrateBlockstateProvider> createPrismaticActiveModel(ResourceLocation modelPath) {
2134
return (ctx, prov) -> {
2235
ActiveBlock block = ctx.getEntry();
2336
ModelFile inactive = prov.models().getExistingFile(modelPath);
24-
ModelFile active = prov.models().getExistingFile(modelPath.withSuffix("_active"));
37+
ModelFile active_red = prov.models().getExistingFile(modelPath.withSuffix("_active_red"));
38+
ModelFile active_orange = prov.models().getExistingFile(modelPath.withSuffix("_active_orange"));
39+
ModelFile active_yellow = prov.models().getExistingFile(modelPath.withSuffix("_active_yellow"));
40+
ModelFile active_lime = prov.models().getExistingFile(modelPath.withSuffix("_active_lime"));
41+
ModelFile active_green = prov.models().getExistingFile(modelPath.withSuffix("_active_green"));
42+
ModelFile active_teal = prov.models().getExistingFile(modelPath.withSuffix("_active_teal"));
43+
ModelFile active_cyan = prov.models().getExistingFile(modelPath.withSuffix("_active_cyan"));
44+
ModelFile active_azure = prov.models().getExistingFile(modelPath.withSuffix("_active_azure"));
45+
ModelFile active_blue = prov.models().getExistingFile(modelPath.withSuffix("_active_blue"));
46+
ModelFile active_indigo = prov.models().getExistingFile(modelPath.withSuffix("_active_indigo"));
47+
ModelFile active_magenta = prov.models().getExistingFile(modelPath.withSuffix("_active_magenta"));
48+
ModelFile active_pink = prov.models().getExistingFile(modelPath.withSuffix("_active_pink"));
49+
// I know this looks godawful, but it's what Spotless gives me :sadcowboy:
2550
prov.getVariantBuilder(block)
2651
.partialState().with(ActiveBlock.ACTIVE, false).modelForState().modelFile(inactive).addModel()
27-
.partialState().with(ActiveBlock.ACTIVE, true).modelForState().modelFile(active).addModel();
52+
53+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.RED.key)
54+
.modelForState().modelFile(active_red).addModel()
55+
56+
.partialState().with(ActiveBlock.ACTIVE, true)
57+
.with(COLOR, PrismaticCrucibleMachine.Color.ORANGE.key).modelForState().modelFile(active_orange)
58+
.addModel()
59+
60+
.partialState().with(ActiveBlock.ACTIVE, true)
61+
.with(COLOR, PrismaticCrucibleMachine.Color.YELLOW.key).modelForState().modelFile(active_yellow)
62+
.addModel()
63+
64+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.LIME.key)
65+
.modelForState().modelFile(active_lime).addModel()
66+
67+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.GREEN.key)
68+
.modelForState().modelFile(active_green).addModel()
69+
70+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.TEAL.key)
71+
.modelForState().modelFile(active_teal).addModel()
72+
73+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.CYAN.key)
74+
.modelForState().modelFile(active_cyan).addModel()
75+
76+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.AZURE.key)
77+
.modelForState().modelFile(active_azure).addModel()
78+
79+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.BLUE.key)
80+
.modelForState().modelFile(active_blue).addModel()
81+
82+
.partialState().with(ActiveBlock.ACTIVE, true)
83+
.with(COLOR, PrismaticCrucibleMachine.Color.INDIGO.key).modelForState().modelFile(active_indigo)
84+
.addModel()
85+
86+
.partialState().with(ActiveBlock.ACTIVE, true)
87+
.with(COLOR, PrismaticCrucibleMachine.Color.MAGENTA.key).modelForState().modelFile(active_magenta)
88+
.addModel()
89+
90+
.partialState().with(ActiveBlock.ACTIVE, true).with(COLOR, PrismaticCrucibleMachine.Color.PINK.key)
91+
.modelForState().modelFile(active_pink).addModel();
2892
};
2993
}
94+
95+
public BlockState changeColor(BlockState state, int colorKey) {
96+
if (state.is(this)) {
97+
return state.setValue(COLOR, colorKey);
98+
}
99+
return state;
100+
}
30101
}

src/main/java/net/neganote/monilabs/data/MoniBlocks.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.gregtechceu.gtceu.common.data.GTModels;
44

5-
import com.tterrag.registrate.util.nullness.NonNullBiConsumer;
65
import net.minecraft.world.item.BlockItem;
76
import net.minecraft.world.level.block.Block;
87
import net.neganote.monilabs.MoniLabs;
@@ -11,6 +10,7 @@
1110
import net.neganote.monilabs.item.PrismaticFocusItem;
1211

1312
import com.tterrag.registrate.util.entry.BlockEntry;
13+
import com.tterrag.registrate.util.nullness.NonNullBiConsumer;
1414

1515
import static net.neganote.monilabs.MoniLabs.REGISTRATE;
1616

@@ -21,7 +21,7 @@ public static void init() {}
2121
public static BlockEntry<PrismaticActiveBlock> PRISMATIC_CASING = REGISTRATE
2222
.block("casings/prismatic_casing", PrismaticActiveBlock::new)
2323
.properties(p -> p.isValidSpawn((state, level, pos, ent) -> false))
24-
.blockstate(PrismaticActiveBlock.createActiveModel(MoniLabs.id("block/casings/prismatic_casing")))
24+
.blockstate(PrismaticActiveBlock.createPrismaticActiveModel(MoniLabs.id("block/casings/prismatic_casing")))
2525
.tag(RecipeTags.MINEABLE_WITH_WRENCH)
2626
.lang("Prismatic Casing")
2727
.item(BlockItem::new)
@@ -44,7 +44,7 @@ public static void init() {}
4444
public static BlockEntry<PrismaticActiveBlock> PRISMATIC_FOCUS = REGISTRATE
4545
.block("prismatic_focus", PrismaticActiveBlock::new)
4646
.properties(p -> p.isValidSpawn((state, level, pos, ent) -> false))
47-
.blockstate(PrismaticActiveBlock.createActiveModel(MoniLabs.id("block/prismatic_focus")))
47+
.blockstate(PrismaticActiveBlock.createPrismaticActiveModel(MoniLabs.id("block/prismatic_focus")))
4848
.tag(RecipeTags.MINEABLE_WITH_WRENCH)
4949
.lang("Prismatic Focus")
5050
.item(PrismaticFocusItem::new)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"parent": "minecraft:block/cube_all",
33
"textures": {
4-
"all": "monilabs:block/casings/prismatic_casing"
4+
"all": "monilabs:block/casings/prismatic_casing_inactive"
55
}
66
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "monilabs:block/casings/prismatic_casing_active_azure"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "monilabs:block/casings/prismatic_casing_active_blue"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "monilabs:block/casings/prismatic_casing_active_cyan"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "monilabs:block/casings/prismatic_casing_active_green"
5+
}
6+
}

0 commit comments

Comments
 (0)