I'm trying to do a thing where I can revert an explosion via hotkey:
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public static class ClientForgeEvents{
@SubscribeEvent
public static void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
while (TEST_KEY.get().consumeClick()) {
Minecraft mc = Minecraft.getInstance();
mc.player.displayClientMessage(Component.literal("hotkey-test"),false);
for(Map.Entry<BlockPos,BlockState> entry : explodedBlocks.entrySet()){
((LevelAccessor) Minecraft.getInstance().level).setBlock(entry.getKey(),entry.getValue(),1);
}
explodedBlocks.clear();
}
}
}
@SubscribeEvent
public static void onExplosion(ExplosionEvent.Detonate evt) {
printToChat(evt.getExplosion().getDirectSourceEntity().toString());
for (BlockPos pos : evt.getAffectedBlocks()) {
explodedBlocks.put(pos,Minecraft.getInstance().level.getBlockState(pos));
}
}
}
explodedBlocks is just a Hashmap with BlockPos and BlockState.
This almost does what I want, except all blocks are ghosts. I'm assuming I have to run this same thing server side somehow, but apart from the general concept of logical and physical clients and servers I feel like I understand nothing. I also can't find any tutorials for 1.21 and the docs page for SimpleImpl just straight up doesn't work (at least the "Getting Started" part, which makes attempting the rest kinda useless).