Skip to content

Commit 055553c

Browse files
committed
Start implementing C&B compat.
1 parent 07327cf commit 055553c

File tree

6 files changed

+226
-0
lines changed

6 files changed

+226
-0
lines changed

Diff for: build.gradle

+8
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ repositories {
7575
includeGroup "curse.maven"
7676
}
7777
}
78+
maven { // C&B
79+
url 'https://ldtteam.jfrog.io/ldtteam/modding/'
80+
}
7881
}
7982

8083
dependencies {
@@ -84,6 +87,11 @@ dependencies {
8487

8588
implementation fg.deobf("curse.maven:the-one-probe-245211:4629624")
8689
implementation fg.deobf("curse.maven:framedblocks-441647:4657096")
90+
91+
compileOnly fg.deobf("com.communi-suggestu.scena:scena-core:1.0.98")
92+
compileOnly fg.deobf("com.communi-suggestu.saecularia-caudices:saecularia-caudices-core:1.0.20")
93+
compileOnly fg.deobf("mod.chiselsandbits:chisels-and-bits-api:1.4.148")
94+
runtimeOnly fg.deobf("mod.chiselsandbits:chisels-and-bits-forge:1.4.148")
8795
}
8896

8997
jar {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package platinpython.rgbblocks.util.compat.cb;
2+
3+
import mod.chiselsandbits.api.client.variant.state.IClientStateVariantManager;
4+
import mod.chiselsandbits.api.plugin.ChiselsAndBitsPlugin;
5+
import mod.chiselsandbits.api.plugin.IChiselsAndBitsPlugin;
6+
import mod.chiselsandbits.api.variant.state.IStateVariantManager;
7+
import net.minecraft.world.level.block.Block;
8+
import net.minecraftforge.api.distmarker.Dist;
9+
import net.minecraftforge.fml.loading.FMLEnvironment;
10+
import net.minecraftforge.registries.RegistryObject;
11+
import platinpython.rgbblocks.RGBBlocks;
12+
import platinpython.rgbblocks.util.registries.BlockRegistry;
13+
14+
import java.util.Set;
15+
16+
@ChiselsAndBitsPlugin
17+
public class RGBCBPlugin implements IChiselsAndBitsPlugin {
18+
private static final Set<RegistryObject<? extends Block>> SUPPORTED_BLOCKS = Set.of(
19+
BlockRegistry.RGB_CONCRETE, BlockRegistry.RGB_CONCRETE_POWDER, BlockRegistry.RGB_WOOL, BlockRegistry.RGB_PLANKS,
20+
BlockRegistry.RGB_TERRACOTTA, BlockRegistry.RGB_GLASS, BlockRegistry.RGB_ANTIBLOCK, BlockRegistry.RGB_GLOWSTONE,
21+
BlockRegistry.RGB_REDSTONE_LAMP, BlockRegistry.RGB_PRISMARINE, BlockRegistry.RGB_PRISMARINE_BRICKS,
22+
BlockRegistry.RGB_DARK_PRISMARINE, BlockRegistry.RGB_SEA_LANTERN
23+
);
24+
25+
@Override
26+
public String getId() {
27+
return RGBBlocks.MOD_ID;
28+
}
29+
30+
@Override
31+
public void onConstruction() {
32+
SUPPORTED_BLOCKS.forEach(
33+
block -> IStateVariantManager.getInstance()
34+
.registerProvider(block::get, new RGBStateVariantProvider(block::get))
35+
);
36+
}
37+
38+
@Override
39+
public void onClientConstruction() {
40+
if (FMLEnvironment.dist == Dist.CLIENT) {
41+
Client.doConstruction();
42+
}
43+
}
44+
45+
private static class Client {
46+
private static void doConstruction() {
47+
SUPPORTED_BLOCKS.forEach(
48+
block -> IClientStateVariantManager.getInstance()
49+
.registerStateVariantProvider(block::get, new RGBClientStateVariantProvider())
50+
);
51+
}
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package platinpython.rgbblocks.util.compat.cb;
2+
3+
import com.communi.suggestu.scena.core.client.models.data.IBlockModelData;
4+
import com.communi.suggestu.scena.core.client.models.data.IModelDataBuilder;
5+
import com.communi.suggestu.scena.core.client.models.data.IModelDataKey;
6+
import mod.chiselsandbits.api.client.variant.state.IClientStateVariantProvider;
7+
import mod.chiselsandbits.api.variant.state.IStateVariant;
8+
import net.minecraft.network.chat.Component;
9+
import net.minecraft.world.item.TooltipFlag;
10+
import net.minecraft.world.level.Level;
11+
12+
import java.util.List;
13+
14+
public class RGBClientStateVariantProvider implements IClientStateVariantProvider {
15+
private static final IModelDataKey<Integer> COLOR = IModelDataKey.create();
16+
17+
@Override
18+
public IBlockModelData getBlockModelData(IStateVariant stateVariant) {
19+
if (!(stateVariant instanceof RGBStateVariant rgbStateVariant)) {
20+
return IBlockModelData.empty();
21+
}
22+
23+
return IModelDataBuilder.create().withInitial(COLOR, rgbStateVariant.color()).build();
24+
}
25+
26+
@Override
27+
public void appendHoverText(IStateVariant stateVariant, Level level, List<Component> list, TooltipFlag flag) {}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package platinpython.rgbblocks.util.compat.cb;
2+
3+
import mod.chiselsandbits.api.variant.state.IStateVariant;
4+
5+
public record RGBStateVariant(int color) implements IStateVariant {
6+
public static final RGBStateVariant WHITE = new RGBStateVariant(-1);
7+
8+
@Override
9+
public int compareTo(IStateVariant o) {
10+
if (!(o instanceof RGBStateVariant rgbStateVariant)) {
11+
return -1;
12+
}
13+
return this.color - rgbStateVariant.color;
14+
}
15+
16+
@Override
17+
public IStateVariant createSnapshot() {
18+
return this;
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package platinpython.rgbblocks.util.compat.cb;
2+
3+
import com.communi.suggestu.scena.core.fluid.FluidInformation;
4+
import mod.chiselsandbits.api.variant.state.IStateVariant;
5+
import mod.chiselsandbits.api.variant.state.IStateVariantProvider;
6+
import net.minecraft.nbt.CompoundTag;
7+
import net.minecraft.network.FriendlyByteBuf;
8+
import net.minecraft.network.chat.Component;
9+
import net.minecraft.world.item.ItemStack;
10+
import net.minecraft.world.level.block.Block;
11+
import net.minecraft.world.level.block.entity.BlockEntity;
12+
import net.minecraft.world.level.block.state.BlockState;
13+
import net.minecraft.world.level.material.FluidState;
14+
import platinpython.rgbblocks.block.entity.RGBBlockEntity;
15+
import platinpython.rgbblocks.item.RGBBlockItem;
16+
17+
import java.util.Collection;
18+
import java.util.List;
19+
import java.util.Optional;
20+
import java.util.function.Supplier;
21+
22+
public class RGBStateVariantProvider implements IStateVariantProvider {
23+
private final Supplier<Block> block;
24+
25+
public RGBStateVariantProvider(Supplier<Block> block) {
26+
this.block = block;
27+
}
28+
29+
@Override
30+
public Optional<IStateVariant> getStateVariant(BlockState state, Optional<BlockEntity> blockEntity) {
31+
if (!state.is(block.get())) {
32+
return Optional.empty();
33+
}
34+
35+
return blockEntity.filter(RGBBlockEntity.class::isInstance)
36+
.map(RGBBlockEntity.class::cast)
37+
.map(be -> new RGBStateVariant(be.getColor()));
38+
}
39+
40+
@Override
41+
public Optional<IStateVariant> getStateVariant(FluidState state) {
42+
return Optional.empty();
43+
}
44+
45+
@Override
46+
public Optional<IStateVariant> getStateVariant(BlockState state, ItemStack stack) {
47+
if (!(stack.getItem() instanceof RGBBlockItem item) || item.getBlock() != block.get()) {
48+
return Optional.empty();
49+
}
50+
return Optional.of(new RGBStateVariant(stack.getOrCreateTag().getInt("color")));
51+
}
52+
53+
@Override
54+
public Optional<IStateVariant> getStateVariant(FluidInformation fluidInformation) {
55+
return Optional.empty();
56+
}
57+
58+
@Override
59+
public Collection<IStateVariant> getAllDefaultVariants(BlockState state) {
60+
return List.of();
61+
}
62+
63+
@Override
64+
public CompoundTag serializeNBT(IStateVariant stateVariant) {
65+
CompoundTag tag = new CompoundTag();
66+
if (stateVariant instanceof RGBStateVariant rgbStateVariant) {
67+
tag.putInt("color", rgbStateVariant.color());
68+
}
69+
return tag;
70+
}
71+
72+
@Override
73+
public IStateVariant deserializeNBT(CompoundTag tag) {
74+
if (!tag.contains("color")) {
75+
return RGBStateVariant.WHITE;
76+
}
77+
return new RGBStateVariant(tag.getInt("color"));
78+
}
79+
80+
@Override
81+
public void serializeInto(FriendlyByteBuf buffer, IStateVariant stateVariant) {
82+
if (!(stateVariant instanceof RGBStateVariant rgbStateVariant)) {
83+
buffer.writeInt(-1);
84+
return;
85+
}
86+
buffer.writeInt(rgbStateVariant.color());
87+
}
88+
89+
@Override
90+
public IStateVariant deserializeFrom(FriendlyByteBuf buffer) {
91+
return new RGBStateVariant(buffer.readInt());
92+
}
93+
94+
@Override
95+
public Optional<ItemStack> getItemStack(IStateVariant stateVariant) {
96+
if (!(stateVariant instanceof RGBStateVariant rgbStateVariant)) {
97+
return Optional.empty();
98+
}
99+
ItemStack stack = new ItemStack(block.get());
100+
stack.getOrCreateTag().putInt("color", rgbStateVariant.color());
101+
return Optional.of(stack);
102+
}
103+
104+
@Override
105+
public Optional<FluidInformation> getFluidInformation(IStateVariant stateVariant, long l) {
106+
return Optional.empty();
107+
}
108+
109+
@Override
110+
public Optional<Component> getName(IStateVariant stateVariant) {
111+
return Optional.of(Component.literal("Test"));
112+
}
113+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@NullMarked
2+
package platinpython.rgbblocks.util.compat.cb;
3+
4+
import org.jspecify.annotations.NullMarked;

0 commit comments

Comments
 (0)