Skip to content

Commit debcba7

Browse files
committed
Melotta, regigigas, regi shrine, Time space altar, tao trio shrine, and lunar shrine voxelshape.
1 parent 6dfd0fe commit debcba7

File tree

12 files changed

+168
-15
lines changed

12 files changed

+168
-15
lines changed

common/src/main/generated/resources/assets/generations_core/lang/en_us.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"badges.generations_core": "Badges",
3-
"block.generations_core.abundant_shrine": "HINT: You need something to reveal the secrets within.",
3+
"block.generations_core.abundant_shrine": "Abundant Shrine",
44
"block.generations_core.aluminum_block": "Aluminum Block",
55
"block.generations_core.aluminum_ore": "Aluminum Ore",
66
"block.generations_core.arceus_doll": "Arceus Doll",
@@ -522,7 +522,7 @@
522522
"block.generations_core.love_ball_loot": "Love Ball Loot",
523523
"block.generations_core.lugia_doll": "Lugia Doll",
524524
"block.generations_core.lugia_shrine": "Lugia Shrine",
525-
"block.generations_core.lunar_shrine": "HINT: It seems empty, strangely like the feeling of a heartache. A summoning ritual is to occur here. A deep malevolent cry is suddenly heard in your left ear- “Souls”. Almost immediately afterwards, a higher-pitched angelic-like cry is heard in your right- “Souls”. Creepy.",
525+
"block.generations_core.lunar_shrine": "Lunar Shrine",
526526
"block.generations_core.lure_ball_display": "Lure Ball Display",
527527
"block.generations_core.lure_ball_loot": "Lure Ball Loot",
528528
"block.generations_core.luxury_ball_display": "Luxury Ball Display",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"values": [
3+
"generations_core:castle_pillar",
4+
"generations_core:ghost_pillar",
5+
"generations_core:prismarine_pillar",
6+
"generations_core:ice_pillar",
7+
"generations_core:dark_prismarine_pillar"
8+
]
9+
}

common/src/main/java/generations/gg/generations/core/generationscore/tags/GenerationsBlockTags.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class GenerationsBlockTags {
3030
public static final TagKey<Block> BALL_DISPLAY_BLOCKS = create("ball_display_blocks");
3131
public static final TagKey<Block> BALL_LOOTS = create("ball_loots");
3232
public static final TagKey<Block> POKEDOLLS = create("pokedolls");
33+
public static final TagKey<Block> REGI_STANDS = create("regi_stands");
3334

3435
private static TagKey<Block> create(String name) {
3536
return TagKey.create(Registries.BLOCK, GenerationsCore.id(name));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public class GenerationsShrines {
3838
public static final RegistrySupplier<Block> ABUNDANT_SHRINE = registerBlockItem("abundant_shrine", () -> new AbundantShrineBlock(SHRINE_PROPERTIES));
3939
public static final RegistrySupplier<Block> CELESTIAL_ALTAR = registerBlockItem("celestial_altar", () -> new CelestialAltarBlock(SHRINE_PROPERTIES));
4040
public static final RegistrySupplier<Block> LUNAR_SHRINE = registerBlockItem("lunar_shrine", () -> new LunarShrineBlock(SHRINE_PROPERTIES));
41-
public static final RegistrySupplier<Block> LIGHT_CRYSTAL = registerBlockItem("light_crystal", () -> new GenericRotatableModelBlock<>(BlockBehaviour.Properties.of(), GenerationsBlockEntities.GENERIC_MODEL_PROVIDING, GenerationsBlockEntityModels.LIGHT_CRYSTAL, 0, 1, 0));
42-
public static final RegistrySupplier<Block> DARK_CRYSTAL = registerBlockItem("dark_crystal", () -> new GenericRotatableModelBlock<>(BlockBehaviour.Properties.of(), GenerationsBlockEntities.GENERIC_MODEL_PROVIDING, GenerationsBlockEntityModels.DARK_CRYSTAL, 0, 1, 0));
41+
public static final RegistrySupplier<Block> LIGHT_CRYSTAL = registerBlockItem("light_crystal", () -> new LunarCystalBlock(BlockBehaviour.Properties.of(), GenerationsBlockEntityModels.LIGHT_CRYSTAL));
42+
public static final RegistrySupplier<Block> DARK_CRYSTAL = registerBlockItem("dark_crystal", () -> new LunarCystalBlock(BlockBehaviour.Properties.of(), GenerationsBlockEntityModels.DARK_CRYSTAL));
4343

4444
public static final RegistrySupplier<Block> MELOETTA_MUSIC_BOX = registerBlockItem("meloetta_music_box", () -> new MeloettaMusicBoxBlock(SHRINE_PROPERTIES));
4545
public static final RegistrySupplier<Block> REGICE_SHRINE = registerBlockItem("regice_shrine", () -> new RegiShrineBlock(SHRINE_PROPERTIES, GenerationsBlockEntityModels.REGICE_SHRINE, LegendKeys.REGICE));
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package generations.gg.generations.core.generationscore.world.level.block;
2+
3+
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntities;
4+
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntityModels;
5+
import generations.gg.generations.core.generationscore.world.level.block.entities.ModelProvidingBlockEntity;
6+
import generations.gg.generations.core.generationscore.world.level.block.entities.generic.GenericModelProvidingBlockEntity;
7+
import generations.gg.generations.core.generationscore.world.level.block.generic.GenericRotatableModelBlock;
8+
import net.minecraft.core.BlockPos;
9+
import net.minecraft.resources.ResourceLocation;
10+
import net.minecraft.world.level.BlockGetter;
11+
import net.minecraft.world.level.block.state.BlockBehaviour;
12+
import net.minecraft.world.level.block.state.BlockState;
13+
import net.minecraft.world.phys.shapes.CollisionContext;
14+
import net.minecraft.world.phys.shapes.Shapes;
15+
import net.minecraft.world.phys.shapes.VoxelShape;
16+
17+
public class LunarCystalBlock extends GenericRotatableModelBlock<GenericModelProvidingBlockEntity> {
18+
private static final VoxelShape SHAPE = Shapes.box(0.3125, 0, 0.3125, 0.6875, 1, 0.6875);
19+
public LunarCystalBlock(BlockBehaviour.Properties properties, ResourceLocation model) {
20+
super(properties, GenerationsBlockEntities.GENERIC_MODEL_PROVIDING, model);
21+
}
22+
23+
@Override
24+
public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
25+
return SHAPE;
26+
}
27+
}

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

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

33
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntities;
44
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntityModels;
5+
import generations.gg.generations.core.generationscore.world.level.block.shrines.LunarShrineBlock;
56
import net.minecraft.core.BlockPos;
67
import net.minecraft.resources.ResourceLocation;
78
import net.minecraft.world.level.block.state.BlockState;
@@ -15,7 +16,6 @@ public LunarShrineBlockEntity(BlockPos pos, BlockState state) {
1516

1617
@Override
1718
public ResourceLocation getModel() {
18-
if (hasLevel() && Objects.requireNonNull(getLevel()).getLightEmission(getBlockPos()) >= 10) return GenerationsBlockEntityModels.LIGHT_MODEL;
19-
return GenerationsBlockEntityModels.DARK_MODEL;
19+
return getBlockState().getValue(LunarShrineBlock.IS_LIGHT) ? GenerationsBlockEntityModels.LIGHT_MODEL : GenerationsBlockEntityModels.DARK_MODEL;
2020
}
2121
}
Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,100 @@
11
package generations.gg.generations.core.generationscore.world.level.block.shrines;
22

3+
import com.google.common.collect.ImmutableMap;
34
import generations.gg.generations.core.generationscore.config.LegendKeys;
45
import generations.gg.generations.core.generationscore.config.SpeciesKey;
56
import generations.gg.generations.core.generationscore.world.entity.block.PokemonUtil;
67
import generations.gg.generations.core.generationscore.world.level.block.GenerationsShrines;
8+
import generations.gg.generations.core.generationscore.world.level.block.GenerationsVoxelShapes;
79
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntities;
810
import generations.gg.generations.core.generationscore.world.level.block.entities.shrines.LunarShrineBlockEntity;
911
import generations.gg.generations.core.generationscore.world.level.block.entities.shrines.ShrineBlockEntity;
1012
import net.minecraft.core.BlockPos;
13+
import net.minecraft.resources.ResourceLocation;
14+
import net.minecraft.server.level.ServerLevel;
15+
import net.minecraft.util.RandomSource;
1116
import net.minecraft.world.InteractionHand;
1217
import net.minecraft.world.InteractionResult;
1318
import net.minecraft.world.entity.player.Player;
19+
import net.minecraft.world.level.BlockGetter;
1420
import net.minecraft.world.level.Level;
21+
import net.minecraft.world.level.block.Block;
1522
import net.minecraft.world.level.block.Blocks;
23+
import net.minecraft.world.level.block.ConduitBlock;
24+
import net.minecraft.world.level.block.entity.BlockEntity;
25+
import net.minecraft.world.level.block.entity.BlockEntityTicker;
26+
import net.minecraft.world.level.block.entity.BlockEntityType;
27+
import net.minecraft.world.level.block.entity.ConduitBlockEntity;
1628
import net.minecraft.world.level.block.state.BlockBehaviour;
1729
import net.minecraft.world.level.block.state.BlockState;
30+
import net.minecraft.world.level.block.state.StateDefinition;
31+
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
32+
import net.minecraft.world.level.block.state.properties.BooleanProperty;
33+
import net.minecraft.world.level.block.state.properties.IntegerProperty;
34+
import net.minecraft.world.level.block.state.properties.Property;
1835
import net.minecraft.world.phys.BlockHitResult;
36+
import net.minecraft.world.phys.shapes.CollisionContext;
37+
import net.minecraft.world.phys.shapes.Shapes;
38+
import net.minecraft.world.phys.shapes.VoxelShape;
1939
import org.jetbrains.annotations.NotNull;
40+
import org.jetbrains.annotations.Nullable;
41+
42+
import java.util.function.Function;
2043

2144
public class LunarShrineBlock extends ShrineBlock<LunarShrineBlockEntity> {
45+
private static final GenerationsVoxelShapes.DirectionalShapes LIGHT = GenerationsVoxelShapes.generateDirectionVoxelShape(Shapes.box(0, 0, 0.1875, 1, 0.4375, 0.8125));
46+
private static final GenerationsVoxelShapes.DirectionalShapes DARK = GenerationsVoxelShapes.generateDirectionVoxelShape(Shapes.box(0, 0, 0, 1, 0.5625, 1));
47+
48+
public static final BooleanProperty IS_LIGHT = BooleanProperty.create("is_light");
2249

2350
public LunarShrineBlock(BlockBehaviour.Properties properties) {
2451
super(properties, GenerationsBlockEntities.LUNAR_SHRINE, null);
2552
}
2653

54+
@Override
55+
protected void createBlockStateDefinition(@NotNull StateDefinition.Builder<Block, BlockState> builder) {
56+
super.createBlockStateDefinition(builder);
57+
builder.add(IS_LIGHT);
58+
}
59+
60+
@Override
61+
protected BlockState createDefaultState() {
62+
return super.createDefaultState().setValue(IS_LIGHT, false);
63+
}
64+
65+
@Nullable
66+
@Override
67+
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> blockEntityType) {
68+
return ConduitBlock.createTickerHelper(blockEntityType, GenerationsBlockEntities.LUNAR_SHRINE.get(), level.isClientSide ? (level1, blockPos, blockState, blockEntity) -> {} : (level12, pos, blockState, blockEntity) -> {
69+
var state1 = level12.getBlockState(pos).setValue(IS_LIGHT, level12.getMaxLocalRawBrightness(pos) >= 10);
70+
level12.setBlockAndUpdate(pos, state1);
71+
});
72+
}
73+
74+
@Override
75+
public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
76+
state = state.setValue(IS_LIGHT, level.getMaxLocalRawBrightness(pos) >= 10);
77+
level.setBlock(pos, state, 4);
78+
}
79+
80+
@Override
81+
public BlockState setSize(BlockState state, int x, int y, int z) {
82+
return super.setSize(state, x, y, z);
83+
}
84+
2785
@Override
2886
public @NotNull InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit) {
2987
if (!level.isClientSide()) {
30-
var key = getSpecies(level, pos);
88+
var key = getSpecies(state);
3189

3290
var block = (key == LegendKeys.CRESSELIA ? GenerationsShrines.LIGHT_CRYSTAL : GenerationsShrines.DARK_CRYSTAL).get();
3391

34-
var list = RegiShrineBlock.searchForBlock(level, pos, 15, 5, (level1, blockPos) -> level1.getBlockState(pos).is(block));
92+
var list = RegiShrineBlock.searchForBlock(level, pos, 15, 5, (level1, blockPos) -> level1.getBlockState(blockPos).is(block));
3593

3694
if (!list.isEmpty() && level.getBlockEntity(pos) instanceof ShrineBlockEntity shrine && !shrine.isActive()) {
3795
if(list.size() == 5) {
3896
shrine.toggleActive();
39-
list.forEach(a -> level.setBlockAndUpdate(a, Blocks.AIR.defaultBlockState()));
97+
list.forEach(a -> level.destroyBlock(a, false));
4098
player.getItemInHand(hand).shrink(1);
4199
PokemonUtil.spawn(key.createProperties(70), level, shrine.getBlockPos());
42100
shrine.toggleActive();
@@ -49,7 +107,12 @@ public LunarShrineBlock(BlockBehaviour.Properties properties) {
49107
return super.use(state, level, pos, player, hand, hit);
50108
}
51109

52-
public SpeciesKey getSpecies(Level level, BlockPos pos) {
53-
return level.getLightEmission(pos) > 10 ? LegendKeys.CRESSELIA : LegendKeys.DARKRAI;
110+
public SpeciesKey getSpecies(BlockState state) {
111+
return state.getValue(IS_LIGHT) ? LegendKeys.CRESSELIA : LegendKeys.DARKRAI;
112+
}
113+
114+
@Override
115+
public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
116+
return (state.getValue(IS_LIGHT) ? LIGHT : DARK).getShape(state);
54117
}
55118
}

common/src/main/java/generations/gg/generations/core/generationscore/world/level/block/shrines/MeloettaMusicBoxBlock.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,22 @@
33
import generations.gg.generations.core.generationscore.world.level.block.entities.MeloettaMusicBoxBlockEntity;
44
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntities;
55
import generations.gg.generations.core.generationscore.world.level.block.entities.GenerationsBlockEntityModels;
6+
import net.minecraft.core.BlockPos;
7+
import net.minecraft.world.level.BlockGetter;
68
import net.minecraft.world.level.block.state.BlockBehaviour;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import net.minecraft.world.phys.shapes.CollisionContext;
11+
import net.minecraft.world.phys.shapes.Shapes;
12+
import net.minecraft.world.phys.shapes.VoxelShape;
713

814
public class MeloettaMusicBoxBlock extends ShrineBlock<MeloettaMusicBoxBlockEntity> {
9-
15+
private static final VoxelShape SHAPE = Shapes.box(0.25f, 0f, 0.25f, 0.75f, 0.375f, 0.75f);
1016
public MeloettaMusicBoxBlock(BlockBehaviour.Properties properties) {
1117
super(properties, GenerationsBlockEntities.MELOETTA_MUSIC_BOX, GenerationsBlockEntityModels.MELOETTA_MUSIC_BOX);
1218
}
19+
20+
@Override
21+
public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
22+
return SHAPE;
23+
}
1324
}

common/src/main/java/generations/gg/generations/core/generationscore/world/level/block/shrines/RegiShrineBlock.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.architectury.registry.registries.RegistrySupplier;
44
import generations.gg.generations.core.generationscore.GenerationsCore;
55
import generations.gg.generations.core.generationscore.config.SpeciesKey;
6+
import generations.gg.generations.core.generationscore.tags.GenerationsBlockTags;
67
import generations.gg.generations.core.generationscore.world.entity.block.PokemonUtil;
78
import generations.gg.generations.core.generationscore.world.item.legends.RegiKeyItem;
89
import generations.gg.generations.core.generationscore.world.level.block.GenerationsBlocks;
@@ -70,7 +71,7 @@ private static String getSymbolSequence(Level world, Direction facing, BlockPos
7071
List<BlockPos> list = checkForUnownSequence(level, blockPos.get(0));
7172
if (!list.isEmpty() && level.getBlockEntity(pos) instanceof ShrineBlockEntity shrine && !shrine.isActive()) {
7273
// shrine.toggleActive();
73-
list.forEach(a -> level.setBlockAndUpdate(a.above(), Blocks.AIR.defaultBlockState()));
74+
list.forEach(a -> level.destroyBlock(a, false));
7475
player.getItemInHand(hand).shrink(1);
7576
PokemonUtil.spawn(species.createProperties(70), level, shrine.getBlockPos());
7677
// shrine.toggleActive();
@@ -139,7 +140,7 @@ private Optional<List<BlockPos>> checkIfInSequence(Direction.Axis axis, BlockPos
139140
}
140141

141142
private static boolean isPillar(Level level, BlockPos pos) {
142-
return level.getBlockState(pos).is(GenerationsBlocks.CASTLE_PILLAR.get()); //TODO convert into tag
143+
return level.getBlockState(pos).is(GenerationsBlockTags.REGI_STANDS);
143144
}
144145

145146
private static String getSymbol(Level level, BlockPos pos) {

common/src/main/java/generations/gg/generations/core/generationscore/world/level/block/shrines/RegigigasShrineBlock.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
import net.minecraft.world.phys.shapes.Shapes;
1515
import net.minecraft.world.phys.shapes.VoxelShape;
1616

17+
import static net.minecraft.core.Direction.SOUTH;
1718
import static net.minecraft.world.phys.shapes.BooleanOp.OR;
1819

1920
public class RegigigasShrineBlock extends InteractShrineBlock<RegigigasShrineBlockEntity> {
2021
private static final GenerationsVoxelShapes.DirectionalShapes SHAPE = GenerationsVoxelShapes.generateDirectionVoxelShape(
2122
Shapes.join(Shapes.box(0, 0, 0, 1, 0.3125, 1),
22-
Shapes.box(0.125, 0, 0.25, 0.875, 0.875, 0.75), OR));
23+
Shapes.box(0.125, 0, 0.25, 0.875, 0.875, 0.75), OR), SOUTH);
2324

2425
@Override
2526
public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {

0 commit comments

Comments
 (0)