fix: made frames properly update on every client when using blueprint/screwdriver/hammer

This commit is contained in:
Adrien1106 2024-06-19 13:20:12 +02:00
parent d325e3c5a5
commit 48c7c4e538
5 changed files with 15 additions and 9 deletions

View File

@ -57,6 +57,6 @@ public class ReFramedDoubleEntity extends ReFramedEntity {
public void writeNbt(NbtCompound nbt) { public void writeNbt(NbtCompound nbt) {
super.writeNbt(nbt); super.writeNbt(nbt);
if(second_state != Blocks.AIR.getDefaultState()) nbt.put(BLOCKSTATE_KEY + 2, NbtHelper.fromBlockState(second_state)); nbt.put(BLOCKSTATE_KEY + 2, NbtHelper.fromBlockState(second_state));
} }
} }

View File

@ -52,16 +52,15 @@ public class ReFramedEntity extends BlockEntity implements ThemeableBlockEntity
if (nbt.contains(BITFIELD_KEY)) bit_field = nbt.getByte(BITFIELD_KEY); if (nbt.contains(BITFIELD_KEY)) bit_field = nbt.getByte(BITFIELD_KEY);
// Force a chunk remesh on the client if the displayed blockstate has changed // Force a chunk remesh on the client if the displayed blockstate has changed
if(world != null && world.isClient && !Objects.equals(rendered_state, first_state)) { if(world != null && world.isClient && !Objects.equals(rendered_state, first_state))
ReFramed.chunkRerenderProxy.accept(world, pos); ReFramed.chunkRerenderProxy.accept(world, pos);
} }
}
@Override @Override
public void writeNbt(NbtCompound nbt) { public void writeNbt(NbtCompound nbt) {
super.writeNbt(nbt); super.writeNbt(nbt);
if(first_state != Blocks.AIR.getDefaultState()) nbt.put(BLOCKSTATE_KEY + 1, NbtHelper.fromBlockState(first_state)); nbt.put(BLOCKSTATE_KEY + 1, NbtHelper.fromBlockState(first_state));
if(bit_field != SOLIDITY_MASK) nbt.putByte(BITFIELD_KEY, bit_field); if(bit_field != SOLIDITY_MASK) nbt.putByte(BITFIELD_KEY, bit_field);
} }
@ -113,7 +112,7 @@ public class ReFramedEntity extends BlockEntity implements ThemeableBlockEntity
} }
public void setTheme(BlockState new_state, int i) { public void setTheme(BlockState new_state, int i) {
if(!Objects.equals(first_state, new_state)) { if(!Objects.equals(first_state, new_state) && i == 1) {
first_state = new_state; first_state = new_state;
markDirtyAndDispatch(); markDirtyAndDispatch();
} }

View File

@ -74,7 +74,14 @@ public class ReFramedBlueprintWrittenItem extends Item {
stacks.stream().map(inventory::getSlotWithStack).forEach(index -> inventory.removeStack(index, 1)); stacks.stream().map(inventory::getSlotWithStack).forEach(index -> inventory.removeStack(index, 1));
player.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.5f, 0.5f); player.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.5f, 0.5f);
} }
frame_entity.readNbt(tag); for (int i = 1; tag.contains(BLOCKSTATE_KEY + i); i++) {
BlockState state = NbtHelper.toBlockState(
Registries.BLOCK.getReadOnlyWrapper(),
tag.getCompound(BLOCKSTATE_KEY + i)
);
frame_entity.setTheme(state, i);
}
if (world.isClient) ReFramed.chunkRerenderProxy.accept(world, pos);
world.playSound(player, player.getBlockPos(), SoundEvents.ITEM_BOOK_PAGE_TURN, SoundCategory.PLAYERS); world.playSound(player, player.getBlockPos(), SoundEvents.ITEM_BOOK_PAGE_TURN, SoundCategory.PLAYERS);
return ActionResult.SUCCESS; return ActionResult.SUCCESS;

View File

@ -43,7 +43,7 @@ public class ReFramedHammerItem extends Item {
world.playSound(player, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1f, 1.1f); world.playSound(player, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1f, 1.1f);
} }
frame_entity.setTheme(Blocks.AIR.getDefaultState(), theme_index); frame_entity.setTheme(Blocks.AIR.getDefaultState(), theme_index);
ReFramed.chunkRerenderProxy.accept(world, pos); if (world.isClient) ReFramed.chunkRerenderProxy.accept(world, pos);
return ActionResult.SUCCESS; return ActionResult.SUCCESS;
} }
} }

View File

@ -52,7 +52,7 @@ public class ReFramedScrewdriverItem extends Item {
case Z -> Direction.Axis.X; case Z -> Direction.Axis.X;
} }
), theme_index); ), theme_index);
ReFramed.chunkRerenderProxy.accept(world, pos); if (world.isClient) ReFramed.chunkRerenderProxy.accept(world, pos);
return ActionResult.SUCCESS; return ActionResult.SUCCESS;
} }
} }