Skip to content

Commit 603b17c

Browse files
committed
Dyed codec.
1 parent 67aaa11 commit 603b17c

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/world/level/block/GenerationsDecorationBlocks.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import generations.gg.generations.core.generationscore.common.world.level.block.
1414
import generations.gg.generations.core.generationscore.common.world.level.block.entities.BallDisplayBlock.DisplayState
1515
import generations.gg.generations.core.generationscore.common.world.level.block.entities.generic.GenericDyedVariantBlockEntity
1616
import generations.gg.generations.core.generationscore.common.world.level.block.utilityblocks.DyeableBlock
17+
import net.minecraft.core.Holder
1718
import net.minecraft.core.registries.Registries
1819
import net.minecraft.world.item.BlockItem
1920
import net.minecraft.world.item.DyeColor
@@ -118,9 +119,9 @@ object GenerationsDecorationBlocks {
118119

119120
fun <T : DyedVariantBlockEntity<*>, V : DyeableBlock<T, V>> registerDyed(
120121
name: String,
121-
blockSupplier: (DyeColor, Map<DyeColor, Supplier<V>>) -> Supplier<V>
122+
blockSupplier: (DyeColor, Map<DyeColor, Holder<Block>>) -> Supplier<V>
122123
): DyedGroup<V, T> {
123-
val dyeMap = HashMap<DyeColor, RegistrySupplier<V>>()
124+
val dyeMap = mutableMapOf<DyeColor, Holder<Block>>()
124125

125126
DyeColor.entries.forEach { dyeColor: DyeColor ->
126127
val properName = "${dyeColor.serializedName}_$name"

common/src/main/java/generations/gg/generations/core/generationscore/common/world/level/block/entities/VendingMachineBlock.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package generations.gg.generations.core.generationscore.common.world.level.block.entities;
22

3+
import com.mojang.serialization.Codec;
34
import com.mojang.serialization.MapCodec;
5+
import com.mojang.serialization.codecs.RecordCodecBuilder;
46
import dev.architectury.registry.registries.RegistrySupplier;
57
import generations.gg.generations.core.generationscore.common.api.player.PlayerMoneyHandler;
68
import generations.gg.generations.core.generationscore.common.network.packets.shop.S2COpenShopPacket;
@@ -9,6 +11,8 @@
911
import generations.gg.generations.core.generationscore.common.world.level.block.utilityblocks.DyeableBlock;
1012
import net.minecraft.core.BlockPos;
1113
import net.minecraft.core.Direction;
14+
import net.minecraft.core.Holder;
15+
import net.minecraft.core.registries.BuiltInRegistries;
1216
import net.minecraft.server.level.ServerLevel;
1317
import net.minecraft.server.level.ServerPlayer;
1418
import net.minecraft.world.InteractionHand;
@@ -18,6 +22,7 @@
1822
import net.minecraft.world.item.ItemStack;
1923
import net.minecraft.world.level.BlockGetter;
2024
import net.minecraft.world.level.block.BaseEntityBlock;
25+
import net.minecraft.world.level.block.Block;
2126
import net.minecraft.world.level.block.state.BlockState;
2227
import net.minecraft.world.phys.BlockHitResult;
2328
import net.minecraft.world.phys.shapes.BooleanOp;
@@ -34,7 +39,7 @@ public class VendingMachineBlock extends DyeableBlock<VendingMachineBlockEntity,
3439
public static GenerationsVoxelShapes.DirectionalShapes LOWER = GenerationsVoxelShapes.generateDirectionVoxelShape(Shapes.join(Shapes.join(Shapes.join(Shapes.box(0.0625, 0, 0.15625, 0.9375, 0.0625, 0.875), Shapes.box(0, 0.026875, 0.04999999999999999, 1, 1, 0.9375), BooleanOp.OR), Shapes.box(0.14687499999999998, 0.21875, 0, 0.865625, 0.546875, 0.0625), BooleanOp.OR), Shapes.box(0.15000000000000002, 0.671875, 0.01874999999999999, 0.86875, 1, 0.08124999999999999), BooleanOp.OR), Direction.SOUTH);
3540
public static GenerationsVoxelShapes.DirectionalShapes UPPER = GenerationsVoxelShapes.generateDirectionVoxelShape(Shapes.join(Shapes.join(Shapes.box(0.0625, 0, 0.15625, 0.9375, 0.0625, 0.875), Shapes.box(0, 0, 0.04999999999999999, 1, 1, 0.9375), BooleanOp.OR), Shapes.box(0.15000000000000002, 0, 0.01874999999999999, 0.86875, 0.84375, 0.08124999999999999), BooleanOp.OR), Direction.SOUTH);
3641

37-
public VendingMachineBlock(DyeColor color, Map<DyeColor, RegistrySupplier<VendingMachineBlock>> function, Properties properties) {
42+
public VendingMachineBlock(DyeColor color, Map<DyeColor, Holder<Block>> function, Properties properties) {
3843
super(color, function, GenerationsBlockEntities.VENDING_MACHINE, properties, GenerationsBlockEntityModels.VENDING_MACHINE, 0, 1, 0);
3944
}
4045

@@ -59,7 +64,11 @@ protected ItemInteractionResult serverUse(ItemStack stack, BlockState state, Ser
5964
return ItemInteractionResult.SUCCESS;
6065
}
6166

62-
public static final MapCodec<VendingMachineBlockEntity> CODEC = simpleCodec(VendingMachineBlock::new)
67+
public static final MapCodec<VendingMachineBlock> CODEC = RecordCodecBuilder.<VendingMachineBlock>mapCodec(instance -> instance.group(
68+
DyeColor.CODEC.fieldOf("color").forGetter(a -> a.color),
69+
Codec.unboundedMap(DyeColor.CODEC, BuiltInRegistries.BLOCK.holderByNameCodec()).fieldOf("function").forGetter(a -> a.getFunction()),
70+
propertiesCodec()
71+
).apply(instance, VendingMachineBlock::new));
6372

6473
@Override
6574
protected MapCodec<? extends BaseEntityBlock> codec() {

common/src/main/java/generations/gg/generations/core/generationscore/common/world/level/block/utilityblocks/DyeableBlock.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,44 @@
11
package generations.gg.generations.core.generationscore.common.world.level.block.utilityblocks
22

33
import dev.architectury.registry.registries.RegistrySupplier
4+
import generations.gg.generations.core.generationscore.common.client.render.rarecandy.instanceOrNull
45
import generations.gg.generations.core.generationscore.common.world.level.block.entities.ModelProvidingBlockEntity
56
import generations.gg.generations.core.generationscore.common.world.level.block.entities.MutableBlockEntityType
67
import generations.gg.generations.core.generationscore.common.world.level.block.generic.GenericRotatableModelBlock
78
import net.minecraft.core.BlockPos
89
import net.minecraft.core.Direction
10+
import net.minecraft.core.Holder
911
import net.minecraft.resources.ResourceLocation
1012
import net.minecraft.server.level.ServerLevel
1113
import net.minecraft.server.level.ServerPlayer
1214
import net.minecraft.world.InteractionHand
1315
import net.minecraft.world.ItemInteractionResult
1416
import net.minecraft.world.entity.player.Player
17+
import net.minecraft.world.item.AdventureModePredicate
1518
import net.minecraft.world.item.DyeColor
1619
import net.minecraft.world.item.DyeItem
1720
import net.minecraft.world.item.Item
1821
import net.minecraft.world.item.ItemStack
19-
import net.minecraft.world.level.BlockGetter
2022
import net.minecraft.world.level.Level
2123
import net.minecraft.world.level.LevelReader
24+
import net.minecraft.world.level.block.Block
2225
import net.minecraft.world.level.block.state.BlockState
2326
import net.minecraft.world.level.storage.loot.LootParams
2427
import net.minecraft.world.phys.BlockHitResult
25-
import java.util.function.BiFunction
28+
29+
fun <T: Any> T.applyIfTrue(predicate: (T) -> Boolean, action: (T) -> T): T {
30+
if(predicate.invoke(this)) return action.invoke(this)
31+
return this
32+
}
2633

2734
abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V>> : GenericRotatableModelBlock<T> {
2835
@JvmField
2936
val color: DyeColor
30-
private val function: Map<DyeColor, RegistrySupplier<V>>
37+
protected val function: Map<DyeColor, Holder<Block>>
3138

3239
constructor(
3340
color: DyeColor,
34-
function: Map<DyeColor, RegistrySupplier<V>>,
41+
function: Map<DyeColor, Holder<Block>>,
3542
biFunction: RegistrySupplier<MutableBlockEntityType<T>>,
3643
baseBlockPosFunction: (BlockPos, BlockState) -> BlockPos,
3744
arg: Properties,
@@ -46,7 +53,7 @@ abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V
4653

4754
constructor(
4855
color: DyeColor,
49-
function: Map<DyeColor, RegistrySupplier<V>>,
56+
function: Map<DyeColor, Holder<Block>>,
5057
biFunction: RegistrySupplier<MutableBlockEntityType<T>>,
5158
baseBlockPosFunction: (BlockPos, BlockState) -> BlockPos,
5259
arg: Properties,
@@ -58,7 +65,7 @@ abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V
5865

5966
constructor(
6067
color: DyeColor,
61-
function: Map<DyeColor, RegistrySupplier<V>>,
68+
function: Map<DyeColor, Holder<Block>>,
6269
biFunction: RegistrySupplier<MutableBlockEntityType<T>>,
6370
arg: Properties,
6471
model: ResourceLocation,
@@ -72,7 +79,7 @@ abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V
7279

7380
constructor(
7481
color: DyeColor,
75-
function: Map<DyeColor, RegistrySupplier<V>>,
82+
function: Map<DyeColor, Holder<Block>>,
7683
biFunction: RegistrySupplier<MutableBlockEntityType<T>>,
7784
arg: Properties,
7885
model: ResourceLocation
@@ -113,11 +120,11 @@ abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V
113120
}
114121

115122
fun getItemFromDyeColor(color: DyeColor): Item {
116-
return getBlockFromDyeColor(color)!!.asItem()
123+
return getBlockFromDyeColor(color).asItem()
117124
}
118125

119-
fun getBlockFromDyeColor(color: DyeColor): V {
120-
return function[color]!!.get()
126+
fun getBlockFromDyeColor(color: DyeColor): Block {
127+
return function[color]!!.value()
121128
}
122129

123130
fun tryDyeColor(
@@ -147,9 +154,9 @@ abstract class DyeableBlock<T : ModelProvidingBlockEntity, V : DyeableBlock<T, V
147154

148155
if (!player.isCreative) heldItem.shrink(1)
149156

150-
val newBlock = getBlockFromDyeColor(dyeColor)
157+
val newBlock = getBlockFromDyeColor(dyeColor).instanceOrNull<DyeableBlock<*, *>>() ?: return false //TODO: This is a stop gap due to codec(). Yea its that expansive.
151158

152-
val defaultState = newBlock!!.defaultBlockState().setValue(FACING, baseState.getValue(FACING))
159+
val defaultState = newBlock.defaultBlockState().applyIfTrue({ it.hasProperty(FACING) }, { it.setValue(FACING, baseState.getValue(FACING)) } )
153160

154161
val dir = state.getValue(FACING)
155162

0 commit comments

Comments
 (0)