Skip to content

Commit 3902116

Browse files
committed
fix: random ticking creating grass blocks without snow overlay
1 parent b17ac00 commit 3902116

9 files changed

Lines changed: 87 additions & 67 deletions

File tree

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
// 1.21.1 2024-10-23T15:47:06.9824307 Snow! Real Magic!/Tags for minecraft:block
2-
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data\minecraft\tags\block\foxes_spawnable_on.json
3-
3003df870d529e581408fbaf8e898d3f7b84c4f8 data\snowrealmagic\tags\block\cannot_accumulate_on.json
4-
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data\minecraft\tags\block\inside_step_sound_blocks.json
5-
f3d2f8378cfc98550418907eff13f4edc6a62d81 data\snowrealmagic\tags\block\snow.json
6-
60678fcbe700a6c24cfd1f32b32977bfac70430a data\minecraft\tags\block\walls.json
7-
665ff7ab6901ffeb785fb54663b5690cb42ca40b data\minecraft\tags\block\wooden_fences.json
8-
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data\minecraft\tags\block\snow.json
9-
36a491a695201f5b03b2c0cca537c626edbc6f3f data\c\tags\block\mushrooms.json
10-
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data\minecraft\tags\block\rabbits_spawnable_on.json
11-
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data\minecraft\tags\block\mineable\shovel.json
12-
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data\minecraft\tags\block\goats_spawnable_on.json
13-
a4e8097fff07f9a74259d6b5dd583f3437ff28a2 data\minecraft\tags\block\snow_layer_can_survive_on.json
14-
17d286cefc512519bc39cbb832d477349f57a35b data\snowrealmagic\tags\block\snowy_setting.json
15-
1b974e78cfc7bc0adf23b7edfd15a3f1046812f6 data\minecraft\tags\block\slabs.json
16-
c69c2d0eb5f9342e4ae4d6b600fa318183e4151f data\minecraft\tags\block\fence_gates.json
17-
df452e72045d7f8f7c5eef06331938e64e7eb4d0 data\minecraft\tags\block\stairs.json
18-
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data\minecraft\tags\block\mooshrooms_spawnable_on.json
19-
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data\minecraft\tags\block\wolves_spawnable_on.json
20-
62ce7645ad0741a3ddddad8c5e97bafa72f3de64 data\minecraft\tags\block\fences.json
21-
62ce7645ad0741a3ddddad8c5e97bafa72f3de64 data\minecraft\tags\block\mineable\pickaxe.json
22-
9363345bbd9f130a6ed15b668e663ed2108a3a99 data\c\tags\block\grass.json
1+
// 26.1-snapshot-3 -999999999-01-01T00:00:00 Snow! Real Magic!/Tags for minecraft:block
2+
9363345bbd9f130a6ed15b668e663ed2108a3a99 data/c/tags/block/grass.json
3+
36a491a695201f5b03b2c0cca537c626edbc6f3f data/c/tags/block/mushrooms.json
4+
c69c2d0eb5f9342e4ae4d6b600fa318183e4151f data/minecraft/tags/block/fence_gates.json
5+
62ce7645ad0741a3ddddad8c5e97bafa72f3de64 data/minecraft/tags/block/fences.json
6+
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data/minecraft/tags/block/foxes_spawnable_on.json
7+
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data/minecraft/tags/block/goats_spawnable_on.json
8+
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data/minecraft/tags/block/inside_step_sound_blocks.json
9+
62ce7645ad0741a3ddddad8c5e97bafa72f3de64 data/minecraft/tags/block/mineable/pickaxe.json
10+
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data/minecraft/tags/block/mineable/shovel.json
11+
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data/minecraft/tags/block/mooshrooms_spawnable_on.json
12+
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data/minecraft/tags/block/rabbits_spawnable_on.json
13+
1b974e78cfc7bc0adf23b7edfd15a3f1046812f6 data/minecraft/tags/block/slabs.json
14+
cb61bbc0985991ef45bfdf4f52a26f9024941ea1 data/minecraft/tags/block/snow.json
15+
df452e72045d7f8f7c5eef06331938e64e7eb4d0 data/minecraft/tags/block/stairs.json
16+
a4e8097fff07f9a74259d6b5dd583f3437ff28a2 data/minecraft/tags/block/support_override_snow_layer.json
17+
60678fcbe700a6c24cfd1f32b32977bfac70430a data/minecraft/tags/block/walls.json
18+
094397c0f6fe1e697d0ffa90cf5a98038f3b173d data/minecraft/tags/block/wolves_spawnable_on.json
19+
665ff7ab6901ffeb785fb54663b5690cb42ca40b data/minecraft/tags/block/wooden_fences.json
20+
3003df870d529e581408fbaf8e898d3f7b84c4f8 data/snowrealmagic/tags/block/cannot_accumulate_on.json
21+
f3d2f8378cfc98550418907eff13f4edc6a62d81 data/snowrealmagic/tags/block/snow.json
22+
17d286cefc512519bc39cbb832d477349f57a35b data/snowrealmagic/tags/block/snowy_setting.json
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
// 1.21.1 2025-03-29T23:19:58.6776585 Snow! Real Magic!/Language (en_us)
2-
8fb7cc0e2b30a68f5d3b6fbc5244e2c87619f0ab assets/snowrealmagic/lang/en_us.json
1+
// 26.1-snapshot-3 -999999999-01-01T00:00:00 Snow! Real Magic!/Language (en_us)
2+
70f693b3ab0bb06cc20eefca06cc4de19e3cb05e assets/snowrealmagic/lang/en_us.json
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
// 1.21.1 2024-10-23T15:47:06.9854234 Snow! Real Magic!/Block Loot Tables
2-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\snowy_double_plant_lower.json
3-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\slab.json
4-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\snowy_double_plant_upper.json
5-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\fence_gate.json
6-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\snow.json
7-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\stairs.json
8-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\wall.json
9-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\snowy_plant.json
10-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\snow_extra_collision.json
11-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\fence.json
12-
74f2677ed9291ec8f56426dad06deb5bc2380344 data\snowrealmagic\loot_table\blocks\fence2.json
1+
// 26.1-snapshot-3 -999999999-01-01T00:00:00 Snow! Real Magic!/Block Loot Tables
2+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/fence.json
3+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/fence2.json
4+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/fence_gate.json
5+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/slab.json
6+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/snow.json
7+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/snow_extra_collision.json
8+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/snowy_double_plant_lower.json
9+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/snowy_double_plant_upper.json
10+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/snowy_plant.json
11+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/stairs.json
12+
74f2677ed9291ec8f56426dad06deb5bc2380344 data/snowrealmagic/loot_table/blocks/wall.json

src/generated/resources/assets/snowrealmagic/lang/en_us.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"snowrealmagic.config.debug": "Debug",
2828
"snowrealmagic.config.debug.forceVanillaIceSnowLogic": "Force Vanilla Ice Snow Logic",
2929
"snowrealmagic.config.debug.forceVanillaIceSnowLogic.desc": "",
30+
"snowrealmagic.config.debug.logBlockError": "Log Block Error",
31+
"snowrealmagic.config.debug.logBlockError.desc": "",
3032
"snowrealmagic.config.debug.mobSpawningCommand": "Mob Spawning Command",
3133
"snowrealmagic.config.debug.mobSpawningCommand.desc": "",
3234
"snowrealmagic.config.fancySnowOnUpperSlab": "Fancy Snow On Upper Slab",

src/generated/resources/data/minecraft/tags/block/snow_layer_can_survive_on.json renamed to src/generated/resources/data/minecraft/tags/block/support_override_snow_layer.json

File renamed without changes.

src/main/java/snownee/snow/GameEvents.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public static InteractionResult onItemUse(Player player, Level level, Interactio
6565
level.setBlock(
6666
pos,
6767
Hooks.copyProperties(blockState, CoreModule.SNOW_BLOCK.defaultBlockState()),
68-
Block.UPDATE_KNOWN_SHAPE | Block.UPDATE_SUPPRESS_DROPS);
68+
Block.UPDATE_NEIGHBORS | Block.UPDATE_SUPPRESS_DROPS);
6969
}
7070
if (!(level.getBlockEntity(pos) instanceof SnowBlockEntity be)) {
7171
return InteractionResult.PASS;
@@ -74,7 +74,7 @@ public static InteractionResult onItemUse(Player player, Level level, Interactio
7474
level.setBlock(
7575
pos,
7676
Hooks.copyProperties(blockState, Blocks.SNOW.defaultBlockState()),
77-
Block.UPDATE_KNOWN_SHAPE | Block.UPDATE_SUPPRESS_DROPS);
77+
Block.UPDATE_NEIGHBORS | Block.UPDATE_SUPPRESS_DROPS);
7878
} else {
7979
be.options.renderOverlay = !be.options.renderOverlay;
8080
be.refresh();

src/main/java/snownee/snow/Hooks.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import net.minecraft.world.level.chunk.LevelChunk;
4747
import net.minecraft.world.level.levelgen.Heightmap;
4848
import net.minecraft.world.phys.BlockHitResult;
49+
import snownee.kiwi.loader.Platform;
4950
import snownee.snow.block.SRMSnowLayerBlock;
5051
import snownee.snow.block.SnowVariant;
5152
import snownee.snow.block.entity.SnowBlockEntity;
@@ -483,7 +484,7 @@ public static boolean useSnowWithItem(
483484
if (i != 0 && level.getBlockEntity(pos) instanceof SnowBlockEntity be) {
484485
hasOverlay = be.options.renderOverlay;
485486
}
486-
level.setBlock(pos, state2, Block.UPDATE_KNOWN_SHAPE | Block.UPDATE_SUPPRESS_DROPS);
487+
level.setBlock(pos, state2, Block.UPDATE_NEIGHBORS | Block.UPDATE_SUPPRESS_DROPS);
487488
block.setPlacedBy(level, pos, state2, player, context.getItemInHand());
488489
if (Hooks.placeLayersOn(level, pos, i, false, context, true, true)) {
489490
if (!player.isCreative()) {
@@ -542,4 +543,10 @@ public static void restoreOriginalBlocks(LevelChunk chunk) {
542543
}
543544
}));
544545
}
546+
547+
public static void logError(Throwable e, String template, Object... args) {
548+
if (SnowCommonConfig.logBlockError || Platform.isProduction()) {
549+
SnowRealMagic.LOGGER.error(template.formatted(args), e);
550+
}
551+
}
545552
}

src/main/java/snownee/snow/SnowCommonConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ public final class SnowCommonConfig {
8686
public static boolean forceVanillaIceSnowLogic = false;
8787
@Path("debug.mobSpawningCommand")
8888
public static boolean debugSpawningCommand = false;
89+
@Path("debug.logBlockError")
90+
public static boolean logBlockError = false;
8991

9092
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
9193
public static boolean canPlaceSnowInBlock() {

src/main/java/snownee/snow/block/SRMSnowLayerBlock.java

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ public BlockState updateShape(
104104
RandomSource random) {
105105
BlockState stateNew = super.updateShape(state, level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random);
106106
if (!(level instanceof WorldGenRegion) && stateNew.getBlock() instanceof SRMSnowLayerBlock) {
107-
BlockState contained = srm$getRaw(stateNew, level, pos);
108-
BlockState containedNew = contained.updateShape(level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random);
109-
if (contained != containedNew) {
107+
BlockState raw = srm$getRaw(stateNew, level, pos);
108+
BlockState containedNew = raw.updateShape(level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random);
109+
if (raw != containedNew) {
110110
if (containedNew.isAir()) {
111111
// level.destroyBlock(pos, true);
112112
return srm$getSnowState(state, level, pos);
@@ -141,7 +141,8 @@ protected void entityInside(
141141
if (raw.is(CoreModule.ENTITY_INSIDE)) {
142142
try {
143143
((BlockBehaviourAccess) raw.getBlock()).callEntityInside(raw, level, pos, entity, effectApplier, isPrecise);
144-
} catch (Throwable _) {
144+
} catch (Throwable e) {
145+
Hooks.logError(e, "Error in entityInside of block %s", raw);
145146
}
146147
}
147148
}
@@ -152,48 +153,53 @@ public void animateTick(BlockState state, Level level, BlockPos pos, RandomSourc
152153
if (raw.is(CoreModule.ANIMATE_TICK)) {
153154
try {
154155
raw.getBlock().animateTick(raw, level, pos, random);
155-
} catch (Throwable _) {
156+
} catch (Throwable e) {
157+
Hooks.logError(e, "Error in animateTick of block %s", raw);
156158
}
157159
}
158160
}
159161

160162
@Override
161163
public void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
162-
BlockState stateIn = srm$getRaw(state, level, pos);
164+
BlockState raw = srm$getRaw(state, level, pos);
163165
try {
164166
super.randomTick(state, level, pos, random);
165167
} catch (Throwable e) {
168+
Hooks.logError(e, "Error in randomTick stage 1 of block %s", raw);
166169
return;
167170
}
168-
if (stateIn.getBlock() instanceof TallGrassBlock || stateIn.getBlock() instanceof DoublePlantBlock) {
171+
if (raw.getBlock() instanceof TallGrassBlock || raw.getBlock() instanceof DoublePlantBlock) {
169172
return;
170173
}
171174
BlockState stateNow = level.getBlockState(pos);
172175
if (!stateNow.is(this)) {
173176
return;
174177
}
175178
try {
176-
stateIn.randomTick(level, pos, random);
179+
raw.randomTick(level, pos, random);
177180
BlockState stateNow2 = level.getBlockState(pos);
178181
if (!stateNow2.is(this)) {
179-
Hooks.convert(level, pos, stateNow2, stateNow.getValue(LAYERS), Block.UPDATE_CLIENTS | Block.UPDATE_KNOWN_SHAPE, true);
182+
Hooks.convert(level, pos, stateNow2, stateNow.getValue(LAYERS), Block.UPDATE_ALL, true);
180183
}
181-
} catch (Throwable ignored) {
184+
} catch (Throwable e) {
185+
Hooks.logError(e, "Error in randomTick stage 2 of block %s", raw);
182186
}
183187
}
184188

185189
@Override
186190
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
191+
BlockState raw = srm$getRaw(state, level, pos);
187192
try {
188-
InteractionResult result = srm$getRaw(state, level, pos).useWithoutItem(level, player, hitResult);
193+
InteractionResult result = raw.useWithoutItem(level, player, hitResult);
189194
if (result.consumesAction()) {
190195
BlockState stateNow = level.getBlockState(pos);
191196
if (!stateNow.is(this)) {
192197
Hooks.convert(level, pos, stateNow, state.getValue(LAYERS), Block.UPDATE_CLIENTS | Block.UPDATE_KNOWN_SHAPE, true);
193198
}
194199
return result;
195200
}
196-
} catch (Throwable ignored) {
201+
} catch (Throwable e) {
202+
Hooks.logError(e, "Error in useWithoutItem of block %s", raw);
197203
}
198204
return super.useWithoutItem(state, level, pos, player, hitResult);
199205
}
@@ -207,16 +213,18 @@ protected InteractionResult useItemOn(
207213
Player player,
208214
InteractionHand hand,
209215
BlockHitResult hitResult) {
216+
BlockState raw = srm$getRaw(state, level, pos);
210217
try {
211-
InteractionResult result = srm$getRaw(state, level, pos).useItemOn(itemStack, level, player, hand, hitResult);
218+
InteractionResult result = raw.useItemOn(itemStack, level, player, hand, hitResult);
212219
if (result.consumesAction()) {
213220
BlockState stateNow = level.getBlockState(pos);
214221
if (!stateNow.is(this)) {
215222
Hooks.convert(level, pos, stateNow, state.getValue(LAYERS), Block.UPDATE_CLIENTS | Block.UPDATE_KNOWN_SHAPE, true);
216223
}
217224
return result;
218225
}
219-
} catch (Throwable ignored) {
226+
} catch (Throwable e) {
227+
Hooks.logError(e, "Error in useItemOn of block %s", raw);
220228
}
221229
return super.useItemOn(itemStack, state, level, pos, player, hand, hitResult);
222230
}
@@ -226,38 +234,39 @@ public void attack(BlockState state, Level level, BlockPos pos, Player player) {
226234
if (level.isClientSide()) {
227235
return;
228236
}
237+
BlockState raw = srm$getRaw(state, level, pos);
229238
try {
230-
BlockState contained = srm$getRaw(state, level, pos);
231-
if (!contained.isAir() && contained.getDestroySpeed(level, pos) == 0) {
232-
level.levelEvent(2001, pos, Block.getId(contained));
233-
Block.dropResources(contained, level, pos, null, player, ItemStack.EMPTY);
239+
if (!raw.isAir() && raw.getDestroySpeed(level, pos) == 0) {
240+
level.levelEvent(2001, pos, Block.getId(raw));
241+
Block.dropResources(raw, level, pos, null, player, ItemStack.EMPTY);
234242
int layers = state.getValue(LAYERS);
235243
level.setBlockAndUpdate(pos, Blocks.SNOW.defaultBlockState().setValue(LAYERS, layers));
236244
}
237-
} catch (Throwable ignored) {
245+
} catch (Throwable e) {
246+
Hooks.logError(e, "Error in attack of block %s", raw);
238247
}
239248
}
240249

241250
@Override
242251
public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) {
243-
BlockState contained = srm$getRaw(state, level, pos);
244-
Block block = contained.getBlock();
245-
return block instanceof BonemealableBlock && ((BonemealableBlock) block).isValidBonemealTarget(level, pos, contained);
252+
BlockState raw = srm$getRaw(state, level, pos);
253+
Block block = raw.getBlock();
254+
return block instanceof BonemealableBlock && ((BonemealableBlock) block).isValidBonemealTarget(level, pos, raw);
246255
}
247256

248257
@Override
249258
public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) {
250-
BlockState contained = srm$getRaw(state, level, pos);
251-
Block block = contained.getBlock();
252-
return block instanceof BonemealableBlock && ((BonemealableBlock) block).isBonemealSuccess(level, random, pos, contained);
259+
BlockState raw = srm$getRaw(state, level, pos);
260+
Block block = raw.getBlock();
261+
return block instanceof BonemealableBlock && ((BonemealableBlock) block).isBonemealSuccess(level, random, pos, raw);
253262
}
254263

255264
@Override
256265
public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) {
257-
BlockState contained = srm$getRaw(state, level, pos);
258-
Block block = contained.getBlock();
266+
BlockState raw = srm$getRaw(state, level, pos);
267+
Block block = raw.getBlock();
259268
if (block instanceof BonemealableBlock) {
260-
((BonemealableBlock) block).performBonemeal(level, random, pos, contained);
269+
((BonemealableBlock) block).performBonemeal(level, random, pos, raw);
261270
BlockState stateNow = level.getBlockState(pos);
262271
Hooks.convert(level, pos, stateNow, state.getValue(LAYERS), Block.UPDATE_ALL, true);
263272
}

0 commit comments

Comments
 (0)